【问题标题】:chrome.tabs.executeScript: Cannot access a chrome:// URL [duplicate]chrome.tabs.executeScript:无法访问 chrome:// URL [重复]
【发布时间】:2014-08-27 08:08:52
【问题描述】:

我是 chrome 扩展开发的新手。

问题不在于访问 chrome:// url 我不想在那里编辑任何内容,但问题在于用于注入脚本的 chrome.tabs.executeScript() 的执行。

我正在尝试使用 chrome .tabs.executeScript 运行后台脚本,但它给出了以下错误:


运行 tabs.executeScript 时未检查 runtime.lastError:无法访问 chrome:// URL

我有以下代码:

清单

{
    "name": "BrowserExtension",
    "version": "0.0.1",
    "manifest_version": 2,
    "description" : "Description ...",
    "icons": { "16": "icons/16x16.png", "48": "icons/48x48.png", "128": "icons/128x128.png" },
    "background" : {
        "scripts": ["background.js"]
    },      
    "permissions": [
        "tabs",
        "background",
        "http://*/*",
        "https://*/*"
    ],
    "browser_action": {
        "default_icon": {
            "19": "icons/19x19.png",
            "38": "icons/38x38.png"
        },
        "default_title": "That's the tool tip"
    }   
}

Background.js

console.log("background.js : click()");
chrome.tabs.executeScript(null, {file: "jquery.min.js"}, function(){
    chrome.tabs.executeScript(null, {file: "auto.js"}, function(){
        chrome.tabs.executeScript(null, {file: "script.js"}, function(){
            //all injected
        });
    });
});

script.js

$(function()
{
    var input = $('input');
    $.each(input,function(index,element){
        var area = new AutoSuggestControl(element.id);
    });    

    var ta = $('textarea');
    $.each(ta,function(index,element){ var area = new AutoSuggestControl(element.id);});

    return 1;
});

auto.js 是一个预编译的 js 文件,在 html 文件中单独使用时可以正常工作。扩展的目的是在文本字段中写入时提供自动完成功能。非常感谢您的帮助。

【问题讨论】:

  • chrome.tabs.executeScript 不运行后台脚本,而是运行content script。您的代码在以解压模式加载时会尝试在 chrome://extensions/ 上运行,因为那是最后一个活动选项卡。如果您没有询问为什么无法访问chrome://-URLs,请编辑问题和标题,并更准确地说明您尝试过的内容,您的预期,但发生了什么,我将重新打开这个问题。

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


【解决方案1】:

chrome:// 网址出于安全原因被阻止。 Google 不希望您在用户不知情的情况下更改外观或更改 chrome 设置。当您加载扩展程序时,它会立即在 chrome://extensions 页面中执行这些文件。如果您想在用户访问的每个选项卡中执行您的脚本,您应该使用:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    //code in here will run every time a user goes onto a new tab, so you can insert your scripts into every new tab
}); 

【讨论】:

  • 使用此处捕获错误:stackoverflow.com/a/45603880/632951
  • 在 Chrome 版本 76.0.3809.132(官方版本)(64 位)中不起作用。当您尝试修改 chrome 页面时,您会在事件处理程序中收到与直接执行相同的错误。我希望改变 Chrome Distiller 中的样式,但没有骰子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 2017-04-20
  • 2012-04-04
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多