保持谷歌浏览器扩展ContentScripts在javascript被阻止时正常工作

时间:2013-06-03 20:23:28

标签: javascript jquery google-chrome-extension

我目前开始摆弄谷歌Chrome扩展程序。我的扩展目前确实向每个网站注入了一些javascript,这会创建一个带有一些功能的侧边栏(虽然这些功能并不重要)。在为这些网站启用javascript时,一切正常,但在被阻止时停止工作。我通过chrome.tabs.executeScript注入代码,它显然在每个页面启动时加载(如创建侧边栏),但此时它只是一个简单的div(所以我说,没有一个函数继续工作)。我之前尝试注入一个标签,当javascript被阻止时,它什么都不做(因此没有创建侧栏)..所以显然有区别,但对我来说都不适用。

据我所知,contentScripts是如何工作的,它们应该在一个孤立的世界中运行,因此不应该受到网站javascript选项的影响(因为扩展的所有其他部分 - 背景页面等等 - 仍然保持工作)。我在网上搜索了答案,但在这个问题上找不到任何东西(我发现一个错误报告已被关闭而没有得到妥善回答)。有没有人知道如何在网站的javascript被阻止时保持注入的代码运行(如特殊权限等)或者我是否必须放弃我的想法?提前谢谢!

EditII:与此同时,我测试了一些内容,好吧,是的,即使关闭了javascript,其中一些仍在继续工作。正如我最初所说的那样,我的脚本最初也是执行,但不会维护它的功能。为了更好地理解应该发生什么的非常苗条的版本。有没有办法让这些功能保持运行,或者是因为它们被注入了太深的网站而无望?

的manifest.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
 } 

contentscript:

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');});

1 个答案:

答案 0 :(得分:0)

以防有人偶然发现:当JavaScript被禁用时,目前无法保持内容脚本的功能。可能这个功能永远不会实现,但谁知道呢。你仍然可以执行一些代码,例如DOM操作仍然可行,因此我想要注入的菜单仍然显示。