Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在网页中作为Google Chrome扩展自动加载bookmarklet_Javascript_Google Chrome_Google Chrome Extension_Bookmarklet_Content Script - Fatal编程技术网

Javascript 在网页中作为Google Chrome扩展自动加载bookmarklet

Javascript 在网页中作为Google Chrome扩展自动加载bookmarklet,javascript,google-chrome,google-chrome-extension,bookmarklet,content-script,Javascript,Google Chrome,Google Chrome Extension,Bookmarklet,Content Script,基本上我制作了一个bookmarklet,我希望它在打开某个通配符URL时运行。出于某些原因,它不会简单地在chrome扩展中作为javascript运行,我已经厌倦了尝试 我认为可以做的是为指定的页面创建一个扩展,该扩展具有内容\u脚本(允许通过匹配)使用通配符),并以某种方式使其执行与用户单击书签栏中的bookmarklet时相同的操作 然而,我不知道如何做到这一点 需要注意的一点是,我需要它来访问页面的全局范围,也就是说,打破扩展沙箱(这是可能的,并且通过Chromium bug trac

基本上我制作了一个bookmarklet,我希望它在打开某个通配符URL时运行。出于某些原因,它不会简单地在chrome扩展中作为javascript运行,我已经厌倦了尝试

我认为可以做的是为指定的页面创建一个扩展,该扩展具有
内容\u脚本
(允许通过
匹配
)使用通配符),并以某种方式使其执行与用户单击书签栏中的bookmarklet时相同的操作

然而,我不知道如何做到这一点

需要注意的一点是,我需要它来访问页面的全局范围,也就是说,打破扩展沙箱(这是可能的,并且通过Chromium bug tracker中的设计也是可能的)

因此,问题再次是:如何从
内容_脚本
加载bookmarklet(换句话说,如何将bookmarklet转换为Google Chrome扩展名)。我也有简单的javascript版本,如果可以的话

是bookmarklet,以防有人想用它进行测试。它的目的是用于(但您需要在收件箱中提供帐户和邮件,才能看到效果悬停在指向“偏差”的链接顶部,并显示带有缩略图的工具提示)


编辑:,在答案评论中发布)

我想你要找的是
消息传递


使用它,您可以将事件从内容脚本传递到后台脚本。在后台页面中,您可以使用所有的Chrome扩展功能。

从bookmarklet转换为Chrome扩展几乎不需要任何工作(前提是bookmarklet只能访问DOM元素,这是您的扩展所遵循的标准)。只需将JavaScript粘贴到扩展的
content\u script.js

但是请注意,bookmarklet使用jQuery。您还必须将其嵌入到内容脚本中。关于如何做到这一点


另一个注释。您不需要为了“突破”扩展而利用某种bug;根据设计,Chrome扩展允许访问页面的DOM元素,但不允许访问JavaScript名称空间中的其他元素。换句话说,如果页面已经将一些超级秘密变量加载到
var bob='我的秘密!!!1'
,您的扩展无法访问
bob
并读取其值。另一方面,如果
bob
的值被加载到
span
标记中,您的扩展可以找到该标记并读取它,因为它是DOM的一部分。

如果您在清单的权限部分放置url,您可以从内容脚本进行跨域调用…

令人窒息的是您在请求url中输入的回调,而这并不需要,因此我将其取出。
这是您的代码的工作版本……
清单

{
  "name": "dA Tooltip Thumbnail",
  "version": "1.0.0",
  "description": "What the name says.",
  "permissions": [
    "http://backend.deviantart.com/*"
  ],
  "icons": {
    "48" : "sample-48.png",
    "128" : "sample-128.png"
  },
  "content_scripts": [
    {
      "matches": ["http://my.deviantart.com/messages/*"],
      "js" : ["jquery-1.7.1.min.js","contentscript.js"]
    }
  ]
}
$(".mcb-title a:first-child").each(function() {
    var b=$(this).attr("href");
    null!=b.match(/https?:\/\/fav\.me\/.*|https?:\/\/.*\.deviantart\.com\/art.*/)&&"true"!=$(this).attr("da-message-preview-attached")&&$.getJSON("http://backend.deviantart.com/oembed?url="+encodeURIComponent(b),$.proxy(function(b) {
        $(this).addClass("da-message-preview").attr("rel",b.thumbnail_url).attr("da-message-preview-attached","true");
        $(this).hover(function(a) {
            window.daMessagePreviewTitle=this.title;
            this.title="";
            $("body").append('<p id="da-message-preview"><img src="'+this.rel+'"/></p>');
            $("#da-message-preview").css( {top:a.pageY-10+"px",left:a.pageX+30+"px",position:"absolute",border:"1px solid #666",background:"#EEE",padding:"5px",display:"none","-webkit-border-radius":"6px","-moz-border-radius":"6px","border-radius":"6px","-webkit-box-shadow":"0px 2px 8px #000","-moz-box-shadow":"0px 2px 8px #000","box-shadow":"0px 2px 8px #000","z-index":"123456"}).fadeIn("fast")
        },function() {
            $("#da-message-preview").remove()
        });
        $(this).mousemove(function(a) {
            $("#da-message-preview").css("top",a.pageY-10+"px").css("left",a.pageX+30+"px")
        })
    },this))

});  
ContentScript

{
  "name": "dA Tooltip Thumbnail",
  "version": "1.0.0",
  "description": "What the name says.",
  "permissions": [
    "http://backend.deviantart.com/*"
  ],
  "icons": {
    "48" : "sample-48.png",
    "128" : "sample-128.png"
  },
  "content_scripts": [
    {
      "matches": ["http://my.deviantart.com/messages/*"],
      "js" : ["jquery-1.7.1.min.js","contentscript.js"]
    }
  ]
}
$(".mcb-title a:first-child").each(function() {
    var b=$(this).attr("href");
    null!=b.match(/https?:\/\/fav\.me\/.*|https?:\/\/.*\.deviantart\.com\/art.*/)&&"true"!=$(this).attr("da-message-preview-attached")&&$.getJSON("http://backend.deviantart.com/oembed?url="+encodeURIComponent(b),$.proxy(function(b) {
        $(this).addClass("da-message-preview").attr("rel",b.thumbnail_url).attr("da-message-preview-attached","true");
        $(this).hover(function(a) {
            window.daMessagePreviewTitle=this.title;
            this.title="";
            $("body").append('<p id="da-message-preview"><img src="'+this.rel+'"/></p>');
            $("#da-message-preview").css( {top:a.pageY-10+"px",left:a.pageX+30+"px",position:"absolute",border:"1px solid #666",background:"#EEE",padding:"5px",display:"none","-webkit-border-radius":"6px","-moz-border-radius":"6px","border-radius":"6px","-webkit-box-shadow":"0px 2px 8px #000","-moz-box-shadow":"0px 2px 8px #000","box-shadow":"0px 2px 8px #000","z-index":"123456"}).fadeIn("fast")
        },function() {
            $("#da-message-preview").remove()
        });
        $(this).mousemove(function(a) {
            $("#da-message-preview").css("top",a.pageY-10+"px").css("left",a.pageX+30+"px")
        })
    },this))

});  
$(“.mcb标题a:第一个孩子”)。每个(函数(){
var b=$(this.attr(“href”);
null!=b.match(/https?:\/\/fav\.me\/.*https?:\/\/.\.deviantart\.com\/art.*/)和&“true”!=$(this.attr(“附加da消息预览”)&&$.getJSON(“http://backend.deviantart.com/oembed?url=“+encodeURIComponent(b),$.proxy(函数(b)){
$(this).addClass(“da消息预览”).attr(“rel”,b.thumbnail_url).attr(“da消息预览已附加”,“true”);
$(此).hover(函数(a){
window.daMessagePreviewTitle=this.title;
此名称为“”;
$(“body”).append(“

”); $(“#da消息预览”).css({top:a.pageY-10+“px”,左:a.pageX+30+“px”,位置:“绝对”,边框:“1px实心”,背景:“EEE”,填充:“5px”,显示:“无”,“webkit边框半径”:“6px”,“moz边框半径”:“6px”,“webkit边框半径”:“6px”,“webkit边框阴影”:“0px 2px 8px#000”,“moz边框阴影”:“0px”,“0px”“2px”“0px”;“2px阴影框”:,“z索引”:“123456”}).fadeIn(“快速”) },函数(){ $(“#da邮件预览”).remove() }); $(this).mousemove(函数(a){ $(“da消息预览”).css(“顶部”,a.pageY-10+“px”).css(“左侧”,a.pageX+30+“px”) }) },本页) });
更改后我注意到的唯一错误是,它试图获取一个url,该url获得404…

…一个小错误,我把它留给你去解决;)

哦,我拿出了计时器的东西,真的需要吗?当你点击一个图库的时候,你会去一个不同的url吗?…因为如果你这样做了,那么内容脚本将被重新注入(你可能需要为该图库添加更多匹配项,但实际上并没有看到).

从bookmarklet转换为Chrome扩展几乎不需要任何工作
我有一个bookmarklet,大约5-6个小时前就可以正常工作了,无论我做了什么尝试,我都无法用它进行扩展。它给出的当前错误基本上是,jQuery用于加载JSONP(填充JSON)的回调函数在调用时找不到(我无法理解它,如果我能自动加载我的工作bookmarklet,我就放弃了)。我真的只想要任何能让它工作的黑客,即使很难看。你的扩展中包括了
jquery.js
?如果你能发布实际的错误消息,那会很有帮助的。是的,我发布了。很快,Google Chrome徽标将变成一张巨魔脸。@CamiloMartin我加载了你的扩展,没有收到任何错误。密码也在发射。我无法确认该行为是否符合您的预期,因为我不知道它的作用,但我没有收到任何控制台错误。运行最新的Chrome17。我卸载了扩展并重新加载,它给了我这些错误。我不知道您是如何运行它的(我认为重要的是知道您是如何在预期页面之外测试它的),但基本上它无法启动随机创建的名为callbac的jQuery