Как выполнить код расширения после завершения работы нативной страницы javascript?

В наши дни многие веб-страницы имеют собственный Javascript для выполнения задач при загрузке страницы. Они либо изменяют содержимое страницы, либо загружают внешние виджеты.

Мое расширение пытается прочитать DOM и вставить некоторые данные на страницах. Однако в некоторых случаях, когда страница имеет свой собственный Javascript, мое расширение выполняется перед страницей Javascript.

Из-за этого страница Javascript может перезаписывать мои вставки или вставлять данные, которые мое расширение не может прочитать. Как я могу ждать, чтобы выполнить мое расширение, пока после загрузки / выполнения функций Javascript страницы?

1 ответ

Может быть, это поможет, но у него есть нежелательные побочные эффекты:

$(function () {
    setTimeout(function () {
        alert("At last!");
    }, 1000); // 1000 millis after page loaded and most probably all onload handlers have been run
});

Основным побочным эффектом является то, что он будет выполнен через 1000 миллисекунд, поэтому в течение этого времени пользователь увидит необработанную страницу, а затем ваш скрипт будет манипулировать ею. При таких обстоятельствах это может стать уродливым и нанести ущерб опыту пользователей.


РЕДАКТИРОВАТЬ:

Вы также можете попробовать это. В конце тела (внутри, но наконец) добавьте этот тег сценария:

<script>
    $(function () { alert("LAST!"); });
</script>

По правилам выполнения скриптов и тому факту, что jQuery соблюдает порядок добавления обработчиков загрузки через $(function () { ... }); идиома, вы можете быть уверены, что ваш код выполняется последним. Проблема заключается в том, что любое асинхронное выполнение, такое как обработчики обратного вызова AJAX, будет выполняться не по порядку (то есть асинхронно по отношению к window.onload обработчики, которые образуют цепочку ответственности). Чтобы справиться с этим, вам нужен шаблон, но он, вероятно, выходит за рамки.

Другие вопросы по тегам