2

基本的にブックマークレットを作成しましたが、特定のワイルドカードURLを開いたときに実行したいと思います。いくつかの理由で、Chrome拡張機能でJavaScriptとして実行されるだけではなく、試してみるのにうんざりしています。

私がうまくいくと思うcontent_scriptのは、指定されたページ(を介してワイルドカードを許可する)用のmatch拡張機能を作成し、ユーザーがブックマークバーのブックマークレットをクリックした場合と同じことを行うことです。

しかし、これを作る方法がわかりません。

注意すべき点の1つは、ページのグローバルスコープにアクセスするために必要です。つまり、拡張サンドボックスから抜け出す必要があります(これは可能であり、Chromiumバグトラッカーの設計により可能であることが確認されています)。

したがって、ここでも問題はcontent_script「ブックマークレットをロードする」方法(つまり、ブックマークレットをGoogle Chrome拡張機能に変換する方法)です。それが役に立つかもしれないなら、私もそれをプレーンなジャバスクリプトで持っています。

これは、誰かがそれを使ってテストしたい場合に備えて、ブックマークレットです。で使用することを目的として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
...小さなエラーです。それを取り除くのはあなたに任せます;)。
ああ、タイマーのものを取り出しましたが、それは本当に必要ですか? ギャラリーをクリックしたときに別の URL に移動しませんか?...そうすると、コンテンツ スクリプトが再注入されるためです (そのための一致をさらに追加する必要があるかもしれませんが、実際には見ませんでした)。

于 2012-01-24T08:24:49.243 に答える
0

ブックマークレットから Chrome 拡張機能への変換に必要な作業はほとんどありません (ブックマークレットが DOM 要素にのみアクセスする場合 - 拡張機能が準拠していると思われる基準)。JavaScript を拡張機能の に貼り付けるだけcontent_script.jsです。

ただし、ブックマークレットは jQuery を使用していることに注意してください。これもコンテンツ スクリプトに埋め込む必要があります。 その方法については、こちらを参照してください。

もう1つのメモ。拡張機能から「抜け出す」ために、ある種のバグを悪用する必要はありません。設計上、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 に答える