Scipt未在选定选项卡中执行以发送和接收消息

时间:2016-05-17 17:51:20

标签: javascript google-chrome-extension

我无法在页面上运行脚本。

这是我的background.js的样子:

chrome.tabs.query({
  url: 'https://www.tradingview.com/*'
}, function(tabs) {
  if (tabs.length == 1) {
    var tabURL = tabs[0].url;
    alert(tabURL);
    alert(tabs[0].id);
    chrome.tabs.executeScript(tabs[0].id, {file: "getTradingData.js"}, function(){
        chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
            console.log(response.farewell);
          });
    });
  } else {
    alert("Please have one and only one tradingview chart page opened.");
  }
});

chrome.tabs.executeScript(tabs[0].id, {file: "getTradingData.js"}应该执行脚本getTradingData.js,但我认为不是。我在脚本中有一个未运行的警报,但在刷新页面时会以内容脚本的形式运行。

以下是ny getTradingData.js的样子: alert(“getTradingData.js正在运行”);

var myPort = chrome.extension.connect();

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    alert("got message");
    if (request.subject == "getPrice")
      sendResponse({
        msg: price
      });
  });

最后这是我的manifest.json:

{
  "manifest_version": 2,

  "name": "Automated TradingView Strategy",
  "description": "This extension shows a Google Image search result for the current page",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "background": {
    "scripts": ["jquery-2.2.3.min.js", "background.js"]
  },
  "content_scripts": [
    {
      "matches": ["https://www.tradingview.com/chart/*", "http://www.tradingview.com/*"],
      "js": ["jquery-2.2.3.min.js", "getTradingData.js"]
    }
  ],
  "permissions": [
    "activeTab",
    "tabs",
    "https://ajax.googleapis.com/"
  ]
}

我需要能够在“tradingview.com/chart/*”和扩展名background.js之间发送数据。但是,当我刷新扩展名时,脚本没有加载,因此无法接收或发送消息。

让我知道我做错了什么。

1 个答案:

答案 0 :(得分:2)

要使用getTradingData.js运行executeScript,您必须在permissions中添加网站地址。

"permissions": ["*://*.tradingview.com/*", "tabs"]

background发送{greeting: "hello"},但您不接受getTradingData.js中的这些数据。因此,你没有得到回应。

console.log(response.farewell);

您不发送response.farewell。它们不会显示。

if (request.subject == "getPrice") {

    sendResponse({msg: price});
}

相同。您只会收到提醒。

Programmatic injection