質問

基本的に私はブックマークレットを作りました、そして、私は特定のワイルドカードURLが開かれたときに実行する必要があります。いくつかの理由で、それは単にChrome拡張子でJavaScriptとして実行されません、そして私は試みにうんざりしています。

が機能することは、指定されたページのcontent_scriptを持つ拡張子を作成することです(これはmatchを介したワイルドカードを使用できます)、どういうわけか同じようにすることです。ユーザーがブックマークバーのブックマークレットをクリックした場合に行われること。

しかし、私はこれを作る方法がわからない。

注記の1つのことは、ページのグローバルスコープにアクセスするために、すなわち拡張サンドボックス(どちらが可能で、は、Chromium Bug Trackerのデザインによって可能になることが確認されました。

だから問題は次のとおりです。 content_scriptから、「ブックマークレットをロードする」(言い換えれば、ブックマークレットをGoogle Chrome Extensionに変換する方法 >)。それが使うことができるならば、私もプレーンジャワースクリプトでもあります。

このは、誰かがそれをテストしたい場合のブックマークレットです。 my.deviantart.com/messages/* で使用されることを意味しています(ただし、あなたの受信トレイにアカウントやメッセージが必要です。エフェクトホバーは「偏差」へのリンクの上にホバーし、そのサムネイルを持つツールチップを表示します)。

edit: 答えのコメントで投稿された拡張試行です。 / P>

役に立ちましたか?

解決

マニフェストの権限部分に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"]
    }
  ]
}
.

contentscript

$(".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://ackend.deviantart. .com / embed?URL= HTTP%3A%2F%2FNEWS.DevIntart.com%2Farticle%2F143885%2F
...小さなエラー、それを取り除くためにあなたにそれを残します。)
ああ、そして私はタイマーのものを取り出しました、それは本当に必要ですか?ギャラリーをクリックすると別のURLになるつもりですか?......コンテンツスクリプトが再投入されますので(本当に見えませんでした)。

他のヒント

あなたが探しているものはMessage Passing

href="http://code.google.com/chrome/extensions/messaging.html" rel="nofollow">> http://code.google.com/chrome/extensions/messaging.html

それを使って、content_scriptから背景スクリプトにイベントを渡すことができます。背景ページ内では、すべてのクロム拡張機能を使用してください。

ブックマークレットからChrome Extensionへの変換に必要な作業はほとんどありません(Bookmarkletのみがあなたの拡張子が準拠しているように見える基準だけを提供しました)。 JavaScriptを拡張子のcontent_script.jsに貼り付けます。

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

他の注意事項。拡張子の「抜け出す」ために、ある種のバグを悪用する必要はありません。設計によって、Chrome ExtensionsはページのDOM要素へのアクセスが許可されていますが、JavaScriptネームスペースの他には何もありません。つまり、ページにvar bob = 'My secret!!!1'にいくつかのスーパーシークレット変数をロードした場合、拡張機能はbobにアクセスできず、その値を読み取ることができませんでした。一方、bobの値がspanタグにロードされた場合、その拡張子はそのタグを見つけて読み取ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top