Как выполнить код расширения после завершения работы нативной страницы 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
обработчики, которые образуют цепочку ответственности). Чтобы справиться с этим, вам нужен шаблон, но он, вероятно, выходит за рамки.