javascript - chrome 扩展的内容脚本在 google、youtube 页面中不起作用

标签 javascript jquery google-chrome-extension

我正在尝试创建一个 chrome 扩展程序。当用户单击我的扩展程序的图标 (browserAction) 时,内容脚本会向打开的页面(当前选项卡)的主体附加一个额外的 div。它在除谷歌搜索页面和 youtube 之外的所有网站上都能正常工作。我没有收到任何错误消息或任何东西。它根本不会给出任何响应。

这是我在 content.js 中的代码:

alert('sdsd');
$('body').append("<div id='popup'>My extension name</div>");

出于测试目的,我已发出警报。因此,当扩展被切换时,它应该显示一条警告消息,然后将 div 附加到 body,理想情况下!但它不会用于这 2 个站点。

知道这里可能出了什么问题吗?

list

{
    "name": "My first extension",
    "version": "1.0",
    "background": { "scripts": ["background.js"] },
    "content_scripts": [{
            "all_frames": true,
            "css": ["style.css"],
            "matches": ["http://*/*","https://*/*"]
        }],
    "permissions": [ "tabs","http://*/*" ],
    "browser_action": { "name": "test" },
    "manifest_version": 2
}

background.js

chrome.browserAction.onClicked.addListener(function(tab){
chrome.tabs.executeScript(null,{file:"jquery.min.js"},function(){
    chrome.tabs.executeScript(null,{file:"content.js"});
});

});

最佳答案

在 Youtube 的页面中,$ 被覆盖并且不是 jQuery。这是

bound: function ()
{
    return document.getElementById.apply(document, arguments)
}

因此您的代码会出现异常 document.getElementById('body')undefined .

您应该尝试使用 noConflict() .

编辑:

你为什么不简单地列出 jQuery.min.js和你的 content.jscontent_scripts而不是以编程方式注入(inject)它们。这样可以避免冲突。

编辑 2:

既然你使用了内容脚本,你应该使用communication as described herebackground.js 发送到内容脚本显示警报的指令。

编辑 3:

另一种解决方案是使用编程注入(inject)(就像您最初所做的那样)而不是使用 jquery,$('body').append("<div id='popup'>My extension name</div>");在 vanilla JS 中被翻译成

var div = document.createElement('div');
div.id = 'popup';
document.body.appendChild(div);
document.getElementById('popup').innerHTML = "My extension name"​;​

但它通常更干净(并且需要更少的权限)以避免程序化注入(inject)。

关于javascript - chrome 扩展的内容脚本在 google、youtube 页面中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037173/

相关文章:

javascript - Promise.all 导致 Jest 显示 UnhandledPromiseRejectionWarning

javascript - 使用 Splinter/Selenium [Python] 与 iFrame 交互

html - 重新分配嵌套影子 DOM 中的重复插槽元素

javascript - 定位所有类元素以从同一点对齐

javascript - 无法覆盖 css 类!对内联样式很重要

javascript - jQuery .each() 和 ajax 获取大小

javascript - 在下面的代码中,为什么事件处理程序没有启动?

jQuery Mobile 错误 - 无法调用未定义的方法 'trigger'

javascript - 背景页面中是否有相当于 `run_at: start` 的内容?

javascript - 从 chrome 扩展程序传递大 blob 或文件