调试Chrome扩展程序的内容脚本

NoR*_*NoR 48 debugging google-chrome-extension google-chrome-devtools content-script

一般的问题

你好!我正在钻研Chrome扩展程序的世界,并且在整体工作流程下降方面遇到了一些问题.似乎Google最近转而大力提倡事件页面,而不是将所有内容保存在background.js和background.html中.我参与其中的一部分意味着我们应该将大部分扩展逻辑传递给内容脚本.

Google的Event Page入门中,他们有manifest.json文件中列出的内容脚本.但是在他们的事件页面示例扩展中,它是通过background.js中的这个代码块引入的:chrome.tabs.executeScript(tab.id, {file: "content.js"}, function() { });

以一种方式做另一种方式有什么好处?

我的守则

我正在推进注入内容脚本的程序化方式,就像Google的例子一样.

的manifest.json

{
    "manifest_version": 2,
    "name": "Test",
    "description": "Let's get this sucker working",
    "version": "0.0.0.1",
    "permissions": [
        "tabs",
        "*://*/*"
    ],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "browser_action": {
        "default_icon": "icon.png"
    }
}
Run Code Online (Sandbox Code Playgroud)

background.js

chrome.browserAction.onClicked.addListener(function() {
    console.log("alert from background.js");
    chrome.tabs.executeScript({file: "jquery-2.0.2.min.js"}, function() {
        console.log("jquery Loaded");
    });
    chrome.tabs.executeScript({file: "content.js"}, function() {
        console.log("content loaded");
    });
});
Run Code Online (Sandbox Code Playgroud)

content.js

console.log('you\'r in the world of content.js');
var ans = {};

ans.createSidebar = function() {

    return {
        init: function(){
            alert("why hello there");
        }
    }
}();

ans.createSidebar.init();
Run Code Online (Sandbox Code Playgroud)

我能够console.log在后台页面的调试器中显示前3个语句.我也可以从content.js获取警报,以显示在任何网站上.但是我无法看到console.logfrom content.js,也无法从content.js查看任何JS.我试过查看后台页面调试器的Sources选项卡的"内容脚本"部分.关于SO的一些其他帖子已经建议添加debugger;语句以使其显示,但我没有任何运气.我见过的最接近的解决方案是这篇文章,但是通过在清单中列出内容脚本来完成.

任何帮助,将不胜感激.谢谢!

方 觉*_*方 觉 65

内容脚本的console.log消息显示在网页的控制台中,而不是后台页面的检查器中.

debugger;如果打开了开发人员工具(用于注入内容脚本的网页),则添加工作.

因此,在这种情况下,您应首先激活开发人员工具(网页),然后再单击浏览器操作图标,一切都应该正常工作.

  • 如果内容脚本在传递内联函数作为参数后出现错误,例如括号不匹配(例如忘记关闭`),则不会发出错误,即使使用`debugger`也会无声地失败.这真令人沮丧.你怎么调试这个? (2认同)