Chrome扩展程序-在选项卡上定义的调用功能(参考错误)

Let_IT_r​​oll

我正在打开一个选项卡,并尝试调用其中定义的函数,但是我总是收到“引用错误”。脚本加载后,我向脚本发送了一条消息,要求运行位于选项卡代码上的“ test1”功能。

这是我的代码:

扩展码

chrome.tabs.executeScript(tab.id, {file: "script.js", runAt: "document_end"}, function(array){  
    //send message executeTest to the created tab
    chrome.tabs.sendMessage(tab.id, {msg: "executeTest"});
});

script.js

url = document.URL; 
window.addEventListener("load", doStuff, true);

function doStuff(){

    //listen for messages coming from extension
    chrome.runtime.onMessage.addListener(
        function(message, sender) {

            var msg = message.msg;
            var url = message.url;    

            switch(msg){
                case "executeTest":
                    test1();
                break;
            }
        }
    );
}  

标签HTML

<head>
<title>Test</title>
</head>

<body>
    <script src="app.js"></script>
</body>
</html>

Tab Javascript

function test1(){
    console.log("test1 is running!");
}

我在脚本上收到了消息,但无法执行“ test1()”。

我究竟做错了什么 ?

可汗

这里有几个无关的问题。

chrome.tabs.sendMessage(tab.id, {msg: executeTest});

executeTest不是字符串,而是(未定义)标识符。那就是抛出错误的原因。

正确的方法(由user2570380忍者书写)是写

chrome.tabs.sendMessage(tab.id, {msg: "executeTest"});

另一个问题是您将无法调用 test1(),因为内容脚本位于隔离的上下文中

要绕过它,您要么需要在网页和您的扩展程序之间使用消息传递,要么使用externally_connectable,或者将一些代码注入页面以触​​发您需要的内容。

考虑到您不控制网页,因此需要在页面上下文中插入代码。例子:

control.js

window.addEventListener("message", function(event) {
  // We only accept messages from ourselves
  if (event.source != window)
    return;

  if (event.data.source && (event.data.source == "MyExtension")) {
    switch(event.data.command){
      case "test1":
        test1();
        break;
    }
  }
}, false);

script.js

// Initialization
var s = document.createElement('script');
// TODO: add "control.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('control.js');
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

// Sending a command (make sure script initialized listener first)
window.postMessage({ source: "MyExtension", command: "test1" }, "*");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chrome扩展程序选项

来自分类Dev

Chrome扩展程序:选项卡上的executeScript

来自分类Dev

关闭Chrome扩展程序选项

来自分类Dev

Chrome扩展程序“版本错误”

来自分类Dev

Google Chrome扩展程序错误

来自分类Dev

Chrome扩展程序-executeScript不在活动选项卡中

来自分类Dev

Chrome扩展程序:Javascript注入到活动选项卡

来自分类Dev

Chrome扩展程序-找出扩展程序选项卡是否打开

来自分类Dev

Chrome扩展程序“未定义$”错误

来自分类Dev

Chrome扩展程序在扩展程序上吗?

来自分类Dev

如何在开发(解包)时在所有选项卡上提供 Chrome 扩展程序?

来自分类Dev

仅在 Chrome 扩展程序的特定选项卡上注入 JS

来自分类Dev

如何从常规网站调用Chrome扩展程序中定义的功能?

来自分类Dev

Chrome扩展程序的自动化功能?

来自分类Dev

从Chrome扩展程序调用Google Apps脚本

来自分类Dev

Chrome扩展程序Ajax调用返回403

来自分类Dev

从网站调用Chrome扩展程序中的函数

来自分类Dev

如何从Chrome扩展程序调用OnBlur方法

来自分类Dev

Chrome扩展程序:自定义协议?

来自分类Dev

Chrome扩展程序:ReferenceError:未定义$

来自分类Dev

Chrome扩展程序错误加载jQuery

来自分类Dev

Chrome扩展程序保存表单错误

来自分类Dev

Chrome扩展程序错误,显示“ onCommand”

来自分类Dev

Chrome扩展程序注入脚本获取错误

来自分类Dev

Chrome扩展程序错误加载jQuery

来自分类Dev

Chrome扩展程序错误,显示“ onCommand”

来自分类Dev

Chrome扩展程序注入脚本获取错误

来自分类Dev

Chrome扩展程序循环检查按钮错误

来自分类Dev

测试Chrome扩展程序-要求错误