Chrome扩展程序外部的消息:在background.js和刚刚创建的窗口之间

时间:2017-08-16 07:47:15

标签: javascript google-chrome

关于我的背景和刚刚创建的窗口之间的通信,几天后我遇到了问题。

  1. 我的背景创建了一个新标签;
  2. 在这个新标签中,我创建了元素("脚本"),其中我放置了名为 window_script 的文件;
  3. 文件 window_script 必须向我的背景发送消息;
  4. 我的代码:

    的manifest.json

    "web_accessible_resources": ["window_script.js", "background.js"],
    

    background.js

    //**Create the new tab**
    var results = window.open('','_blank');
    
    //**Insert button inside the new tab**
    var button = results.document.createElement("button");
    button.setAttribute("id","Button_Recalculer");
    button.innerHTML = "Calculer";
    results.document.body.appendChild(button);
    
    //Insert in this new tab the script named "window_script"
    var script = results.document.createElement("script");
    script.src = chrome.extension.getURL('window_script.js');
    (results.document.head || results.document.documentElement).appendChild(script);
    
    //Listen the message comes from outside the chrome extension
    chrome.runtime.onMessageExternal.addListener(function(msg, sender, sendResponse) {
    if(msg.text === 'From_Web')
    {
        console.log("its works");
    }
    });
    

    window_script.js

    var Recalcul = document.getElementById('Button_Recalculer');
    Recalcul.addEventListener('click', function() {
    console.log("Before msg sended");
    var url = "jocipeeapnnenbinklbhajdognaaaaaaaaa";
    chrome.runtime.sendMessage(url,{text:'From_Web'});
    console.log("Msg sended");
    });
    

    window_script 的控制台内,我看到了console.log"在msg发送之前"和console.log" msg发送"。但是在 background 的控制台内,我没有看到console.log"它的作品和#34;,就像这样没有收到消息,而它被罚款了 window_script ;你有什么想法吗?我已经阅读了有关交叉消息的主题,尝试过,但没有找到解决方案

    谢谢

    杰里米

1 个答案:

答案 0 :(得分:0)

background.js似乎没问题,但是当您从Chrome扩展程序发送邮件时出现问题。

基于这篇文章:https://developer.chrome.com/apps/messaging

"从扩展程序向内容脚本发送请求看起来非常相似,只是您需要指定要将其发送到哪个选项卡。此示例演示如何向选定选项卡中的内容脚本发送消息。"

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});

我希望这会有所帮助, 福克