【问题标题】:window.onload Not Triggering in Injected Javascript?window.onload 未在注入的 Javascript 中触发?
【发布时间】:2021-03-22 21:09:59
【问题描述】:

我有一个 chrome 扩展程序,可以将 javascript 代码注入到这样的网页中

if (document.readyState === "complete") {
    const html = `
        <html>
        <head>
            <meta charset="UTF-8">
        </head>
        <body>
        <script type="text/javascript">
            console.log(location.href);

            function doStuff() {
                console.log("do stuff");
            }

            console.log("onload");

            window.onload = function () {
                console.log("WINDOW LOADED");
                doStuff();
            }
        </script>
        </body>
        </html>
    `;
    document.write(html);
}

但是,在我导航到页面并且扩展程序注入 javascript 后,我​​可以在控制台中看到它确实记录了 location.hrefonload,但 window.onload 没有触发,我没有看到控制台中的WINDOW LOADED,也没有调用doStuff()

我也试过

window.addEventListener('load', (event) => {
  console.log('page is fully loaded');
});

还有

document.addEventListener('DOMContentLoaded', doStuff);

无济于事。 任何帮助将不胜感激,我找不到任何有效的方法。

【问题讨论】:

    标签: javascript html google-chrome-extension code-injection onload


    【解决方案1】:

    我设法通过在我的 &lt;script&gt; 顶部添加来解决此问题

    setTimeout(() => {
        let evt = document.createEvent('Event');
        evt.initEvent('load', false, false);
        window.dispatchEvent(evt);
    }, 300);
    

    这会导致window.onload 触发。希望这对遇到相同问题的人有所帮助

    【讨论】:

    • 听起来如果你需要这个,那么你的代码实际上是在页面加载后注入的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多