美文网首页
safari插件使用js发送消息browser.runtime.

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

作者: 生命不止运动不息 | 来源:发表于2023-06-24 16:35 被阅读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 之间进行通信的两种常用方法。您可以根据具体的需求选择适合的方法来实现通信。

    相关文章

      网友评论

          本文标题:safari插件使用js发送消息browser.runtime.

          本文链接:https://www.haomeiwen.com/subject/baybydtx.html