错误如下:
Error: Invalid 'message' value passed to webPageRuntime.sendMessage(). Expected an object.
使用的错误代码如下:(原因是缺参数,但官方的例子就是这么写的。。)
browser.runtime.sendMessage({"greeting": 'testmsg'},function(res) {
console.log("Received response ", res);
});
原因:缺了一个参数,sendMessage需要3个参数
正确示例
browser.runtime.sendMessage( extensionID, { greeting: "Hello!" }, function(response) { console.log("Received response from the background page" ); console.log(response); } );
正确示例代码:加了一个extensionID,随便给了个值
browser.runtime.sendMessage('eid', {"greeting": 'testmsg'},function(res) {
console.log("Received response ", res);
});
--------------------------------------------------------------------
2023-6-25更新
如何在注入主页面的js与content.js之间通信?
使用事件机制:除了消息传递,还可以使用自定义事件机制在注入的 JavaScript 和 content.js 之间进行通信。这需要通过 DOM API 来创建和触发自定义事件。例如,在注入的 JavaScript 中使用以下代码触发自定义事件:
var event = new CustomEvent('customEvent', { detail: { data: 'Hello from injected script!' } });
document.dispatchEvent(event);
在 content.js 中,可以通过监听事件的方式来接收自定义事件:
document.addEventListener('customEvent', function(event) {
console.log(event.detail.data); // 输出: "Hello from injected script!"
});
以上是在 Safari 拓展程序中注入的 JavaScript 代码和 content.js 之间进行通信的两种常用方法。您可以根据具体的需求选择适合的方法来实现通信。
网友评论