0

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

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

代码

此应用程序是Google Chrome的一对打包应用程序。

授权

//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

Dropbox OAuth

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!!");    
        });
    });

但是错误和上面一样

4

1 回答 1

0

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

结果 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对象来传递代码而不使用脚本文件。

于 2013-01-22T19:43:27.127 回答