2

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

认为可以工作的是content_script为指定页面制作一个扩展名(允许通配符 via match),并以某种方式使其执行与用户单击书签栏中的小书签相同的事情.

但是,我不知道如何制作这个。

需要注意的一点是,我需要它来访问页面的全局范围,即突破扩展沙箱(这是可能的,并且在 Chromium 错误跟踪器中通过设计确认是可能的)。

所以问题又是:如何从content_script中“加载书签”(换句话说,如何将书签转换为 Google Chrome 扩展程序)。如果可以使用的话,我也有它在纯 javascript 中。

是书签,以防有人想用它进行测试。它旨在用于my.deviantart.com/messages/*(但您需要在收件箱中拥有一个帐户和消息,以查看悬停在“偏差”链接顶部的效果,它将显示带有缩略图的工具提示)。

编辑: 这是一个扩展尝试,发布在答案的评论中)

4

3 回答 3

1

如果您将 url 放入清单的权限部分,则可以从内容脚本进行跨域调用...
http://code.google.com/chrome/extensions/xhr.html

它似乎令人窒息的是您在请求 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))

});  

更改后我注意到的唯一错误是它试图获取一个 404 的 url ...
http://backend.deviantart.com/oembed?url=http%3A%2F%2Fnews.deviantart.com%2Farticle% 2F143885%2F
...小错误,我会让你摆脱那个错误;)。
哦,我把计时器的东西拿出来了,真的需要吗?当您单击图库时,您不会转到不同的网址吗?...因为如果您这样做,那么内容脚本将被重新注入(您可能需要为此添加更多匹配项,实际上并没有看到)。

于 2012-01-24T08:24:49.243 回答
0

从小书签转换为 Chrome 扩展程序几乎不需要任何工作(假设小书签只访问 DOM 元素 - 您的扩展程序似乎遵守的标准)。只需将 JavaScript 粘贴到您的扩展程序的content_script.js.

但请注意,您的小书签使用 jQuery。您还必须将其嵌入到您的内容脚本中。 请参阅此处了解如何执行此操作。

另一个注意事项。您不需要利用某种错误来“突破”扩展;按照设计,Chrome 扩展程序可以访问页面的 DOM 元素,但不能访问 JavaScript 命名空间内的其他内容。换句话说,如果页面已将一些超级机密变量加载到var bob = 'My secret!!!1'中,您的扩展程序将无法访问bob和读取其值。另一方面,如果bob的值被加载到span标签中,您的扩展可以找到该标签并读取它,因为它是 DOM 的一部分。

于 2012-01-23T16:32:27.860 回答
-1

我认为您正在寻找的是Message Passing

http://code.google.com/chrome/extensions/messaging.html

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

于 2012-01-23T16:30:43.250 回答