【问题标题】:Unknown error on chrome.tabs.executeScriptchrome.tabs.executeScript 上的未知错误
【发布时间】:2012-02-07 20:13:17
【问题描述】:

我需要在外部页面上运行脚本。

我正在尝试使用 Dropbox API(仅限 JavaScript 和 HTML)。 我正在使用 JsOAuth 来处理 OAuth。

代码

这个应用是一对Packaged Apps到谷歌浏览器的类型。

授权

//Request token
chrome.windows.create({url: url, type:"popup"}, function(win){
        chrome.tabs.executeScript(win.id, { file: "contentScript.js" }, function(){
            console.log("Callback executeScript!!");    
        });
    });

url = 请求令牌 url

contentScript.js

$(document).ready(function() {
    console.log("Script injected!!!");
})

控制台出错

tabs.executeScript 期间出错:未知错误。 chromeHidden.handleResponseextensions/schema_g​​enerated_bindings.js:94 openAuthoriseWindowscripts.js:297 g.fetchRequestTokenjsOAuth-1.3.3.min.js:1 g.init.request.q.onreadystatechange

尝试

由于外部页面不能使用jQuery,所以努力删除了对jQuery的引用

contentScript.js

console.log("Script injected!!!");

控制台出错

Error during tabs.executeScript: Unknown error.
chromeHidden.handleResponse

另一种尝试是通过代码注入脚本:

//Request token
chrome.windows.create({url: url, type:"popup"}, function(win){
        chrome.tabs.executeScript(win.id, { code: "console.log('Script injected!!')" }, function(){
            console.log("Callback executeScript!!");    
        });
    });

但是错误和上面一样

【问题讨论】:

  • 如果您尝试在 executeScript 方法调用中将 win.id 替换为 null 会发生什么情况? chrome.tabs.executeScript 需要一个选项卡 ID(可能与窗口 ID 不同?),如果使用 null,它只会在当前选定的选项卡中执行。
  • 但我的目标不是在当前选项卡中运行,而是在打开此窗口的选项卡上运行。但是因为我发现了错误:我必须将 id 传递给 Tab id 而不是窗口 id:chrome.tabs.executeScript(win.tab[0].windowId ....
  • 你检查过脚本的权限吗?

标签: javascript oauth google-chrome-extension dropbox-api


【解决方案1】:

我不确定您是将脚本注入到打开窗口的选项卡中,还是刚刚打开的新选项卡中。无论如何,我努力回答以下两个问题。首先,请注意您不应尝试将脚本加载到窗口对象中。该窗口可以包含多个选项卡,每个选项卡都有自己的脚本环境。将您的脚本注入新打开的窗口的选项卡中。

结果 1: 将脚本注入到您刚刚打开的选项卡中

下面的代码应该将脚本加载到窗口的所有选项卡中,因为win.tabs 提供了一个选项卡数组。对于一个新打开的窗口,通常只有一个标签页。

chrome.windows.create({url: "https://google.com", type:"popup"}, function(win){
    chrome.tabs.executeScript(win.id.tabs, 
                              { code: "console.log('new tab context');" });
});

结果 2: 将脚本注入打开窗口的选项卡中

记录打开新窗口的标签的id,然后在回调中注入脚本

var openingTabId = ASSIGN_THE_TAB_ID;
chrome.windows.create({url: "https://google.com", type:"popup"}, function(win){
    chrome.tabs.executeScript(openingTabId, 
                              { code: "console.log('opening tab context');" });
});

请注意,我使用code 对象来传递代码,而不使用脚本文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多