【问题标题】:chrome.tabs.executeScript return value to background.js from injected file [duplicate]chrome.tabs.executeScript 从注入的文件返回值到 background.js [重复]
【发布时间】:2014-04-21 10:19:49
【问题描述】:

我制作了一个 chrome 扩展,在用户点击图标后运行(浏览器操作)。 用户单击图标后,文件 background.js 正在运行。它将检查选项卡,我在选项卡中注入一个 js 文件。

文件背景.js

chrome.browserAction.onClicked.addListener(function(tab) {

    chrome.tabs.query({'url':"URL TO SEARCH"}, function(tabs) {
        //console.log(tabs[0].id);
        chrome.tabs.executeScript(tabs[0].id, {file: "do.js"}, function (test){
            console.log(test);
        });
    });
});

文件 do.js 做了一些事情(它没有问题),我想在 do.js 的末尾返回一个值,但我被困在代码中,因为我找不到解决方案。

做.js

if ( Test1) {
    do something;
    return ok; //how to do that ????
}else{
    do someting;
    return not ok; //how to do ???
}

我的问题是添加到 do.js 以返回简单文本值的代码是什么。我已阅读此question,但我不明白答案。

manifest.json 下方

"background": {
    "scripts": ["background.js"]
},
"permissions": [
    "tabs", "http://*/*", "https://*/*","file:///*"
],
"browser_action": {
  "default_title": "Mute Hangout",
  "default_icon": "icon16.png"
},
"manifest_version": 2

谢谢

【问题讨论】:

  • 不知道为什么这被标记为重复 - 另一个问题是当使用带有“代码”字符串的 executeScript 时,这个问题是关于“文件”模式的。

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

chrome.tabs.executeScript 的回调会在注入脚本执行时执行。最后一条语句将作为结果参数传递给回调。

var result;

if (Test1) {
    do something
    result = "ok";
}else{
    do something
    result = "not ok";
}

// pls make sure that the result you want to pass to executeScript callback need to be the last statement of the injecting script
result

【讨论】:

  • 非常感谢它成功了,我在这一点上花了 2 个小时......其实很简单......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多