注入文件上声明的函数无法从 chrome 扩展名中的 background.js 识别

Function declared on injected file not recognize from background.js in chrome extension

我正在尝试使用 https://github.com/povdocs/webvr-starter-kit 创建一个 chrome PageAction 扩展。

在我的 manifest.json 文件中,我使用 content_scripts 加载 jquery.js 和另一个 inject.js.

在我的 inject.js 上,我有以下代码:

function initVR() {
    VR.floor();
    VR.box({ color: '#FFFFFF' }).moveTo(0, 1.4, 0).setScale(5,4,0);
    var text = VR.text({
        wrap: 4.1,
        font: '24pt Roboto',
        textAlign: 'left',
        fillStyle : '#000000',
        text : 'Hello world test'
    })
    .moveTo(.1, 1.4, 0);
}

在我的 background.js 文件中,我

chrome.pageAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(tab.ib, {
    file:  "src/inject/vr.dev.js"
  }, function(){
    initVR();    //Calling the function I declared on inject.js
});

这里的想法是,当一个人点击 pageAction 按钮时,它会注入 vr.dev.js 并初始化设置。

当我实现这个时,我收到一条错误消息,指出 initVR() 未定义。我做错了什么?

您的后台脚本无法访问您的内容脚本。您应该改为从 background.js 向您的页面发送一条消息,并在那里有一个侦听器来调用函数 initVR()

你必须使用消息传递来与内容脚本通信,因为你的浏览器的扩展是一个单一的后台脚本,它必须识别标签

https://developer.chrome.com/extensions/messaging