我目前开始摆弄谷歌浏览器扩展。我的扩展目前确实将一些 javascript 注入到每个网站中,这会创建一个带有一些功能的侧边栏(尽管哪些功能并不重要)。在为这些网站启用 javascript 时一切正常,但在被阻止时停止工作。我通过 chrome.tabs.executeScript 注入代码,它在每个页面启动时都清楚地加载(因为创建了侧边栏),但此时它只是一个简单的 div(正如我所说,没有一个函数继续工作)。我之前尝试过注入一个标签,当 javascript 被阻止时,它什么都不做(所以没有创建侧边栏)。所以显然有区别,但对我来说都不适用。
据我了解 contentScripts 是如何工作的,它们应该在一个孤立的世界中运行,因此不应该受到站点 javascript 选项的影响(因为扩展的所有其他部分 - 背景页面等 - 仍然可以正常工作)。我在网上搜索了答案,但在这个问题上找不到任何东西(好吧,我发现了一个错误报告,该报告在没有得到正确回答的情况下被关闭)。有人知道如何在站点的 javascript 被阻止(如特殊权限等)时保持注入的代码运行,还是我必须放弃我的想法?提前致谢!
EditII:与此同时,我测试了一些内容脚本,是的,即使关闭了 javascript,它们中的一些仍然可以工作。正如我最初所说,我的脚本最初也是执行的,但不会保持它的功能。为了更好地理解应该发生的事情的一个非常苗条的版本。有没有办法让这些功能保持运行,还是因为它们被注入站点太深而无望?
清单.json
{
"name" : "Example",
"version" : "1.0.1",
"description" : "Creates a sidebar, which looses dragable() function when javascript is turned off",
"permissions" : [ "tabs" ],
"content_scripts" : [
{
"matches" : [ "http://*/*" ],
"js" : [ "jquery.js", "jquery-ui.js", "contentscript.js" ],
"run_at" : "document_end",
"all_frames" : true
}
],
"manifest_version": 2
}
内容脚本:
var sidebar;
sidebar = $("<div id='example_sidebar'></div>");
sidebar.css({
'position': 'fixed',
'right': '0px',
'top': '200px',
'z-index': 9999,
'width': '70px',
'height': '140px',
'background-color': 'blue' // Confirm it shows up
});
$('body').append(sidebar);
$(function() {
$( "#example_sidebar" ).draggable();
});
$("#example_sidebar")
.on( "mouseenter", function() {
console.log('entered the div');
})
.on( "mouseleave", function() {
console.log('left the div');
});
$('#example_sidebar').on('click', function() {
console.log('clicked the div');});