safari插件使用js发送消息browser.runtime.

2023-06-24  本文已影响0人  生命不止运动不息

错误如下:

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 之间进行通信的两种常用方法。您可以根据具体的需求选择适合的方法来实现通信。

上一篇下一篇

猜你喜欢

热点阅读