首页 > 解决方案 > Chrome V71 打破了扩展 JS 注入?

问题描述

我正在使用此处描述的方法 1

使用内容脚本将代码插入页面上下文

这是基于

谷歌浏览器“应用程序快捷方式”:如何自动加载 JavaScript?

这工作正常,但在我的浏览器(Chrome)更新到 v71 后,这不再工作,因为我的元素在我注入的 JS 文件中找不到函数了。我准备了一个简单的例子:

清单.json

   {
  "manifest_version": 2,
  "name": "Test",
  "version": "1.0.0",
     "web_accessible_resources": 
                [
                    "Callbacks.js"
                ],  
  "content_scripts": [
    {
        "matches": ["https://stackoverflow.com/"], 
        "js": ["inject.js"],
        "run_at": "document_idle"
    }
  ],
  "permissions": [
    "activeTab"
  ]
}

注入.js

function newButton(id, cb) 
{
    var b = document.createElement("div");
    b.setAttribute("onclick",cb);
    b.style.margin = "50px"
    b.style.width = "100px";
    b.style.height = "100px";   
    b.style.background = "gray";
    b.style.zIndex = 10000000;
    b.style.position = "absolute";
    b.id = id;  
    return b;
}

    var cc= document.createElement("script");
    cc.src =  chrome.runtime.getURL('Callbacks.js') ;
    document.body.appendChild(cc);

    document.body.appendChild(newButton("myId", "myfun();"));

回调.js

function myfun(){
    window.alert("hallo");
}

在 stackoverflow.com 上单击灰色 div 时,我在控制台中看到了这个

(index):1 Uncaught ReferenceError: myfun is not defined at HTMLDivElement.onclick ((index):1) onclick @ (index):1

但是,我仍然可以直接从控制台调用 myfun。

有什么想法吗?对于较旧的 Chrome 版本,这仍然有效。

标签: javascriptgoogle-chrome-extension

解决方案


如@wOxxOm 所述进行了重组,现在可以正常工作。


推荐阅读