0

私はクロム拡張機能にまったく慣れていませんが、入門書を読み、Google から例を組み立てました。アクティブな間、mydomain.com で中マウス クリック イベントをキャプチャし、URL を読み取り、それを変更して、新しく作成された URL で新しいタブを起動する拡張機能を構築したいと思います。

私がこれまでに理解したことから、すべての mydomain.com ページの読み込みで挿入される manifest.json ファイルと my_script.js ファイルが必要です。これは正しいです ?はいの場合、次にどのように進めるべきか、また、指定されたタスクを達成するためにマニフェストと JavaScript ファイルに何を追加する必要がありますか。いくつかのコード例をいただければ幸いです。

また、stackoverflow でいくつかの回答を読みましたbrowserAction。使用する場合は、拡張ページでのみ使用できるため、コンテンツ スクリプトでは使用できません。つまり、 my_script.js ではなく、バックグラウンド ページにコードを配置する必要があります。どのように進めればよいかアドバイスをお願いします。

ありがとうございました

作業スクリプトの解決策は次のとおりです。

$(document).click(function(e) {
    var urlToGo = window.location.href;

    // middle button
    if (e.which == 2) {
        urlToGo = "http://google.com"; 
        window.open(urlToGo);       
        e.preventDefault();
        e.stopPropagation();
    }
});
4

3 に答える 3

1

私のシンプルなChrome拡張コンテンツスクリプトスケルトンhttps://github.com/robin-drexler/Simple-Chrome-Extension-Content-Script-Skeletonから始めることができます。これは、マニフェストとコンテンツスクリプトを提供します。アクセスするすべてのページ。

これで、続行して目的の機能を実装できます。次に、window.openを使用して新しいタブ/ウィンドウを開くか(より簡単な方法)、ネイティブのChromeAPIを使用して新しいタブを開くことができます。

window.open(コンテンツスクリプト内)

 $(function() {
        $(document).on('click', function(e){
            //do some replace magic here
            var url = 'http://google.com';
            if (e.which === 2) {
                window.open(url);       
            }        
        });
    });

http://jsfiddle.net/886jY/2/

ChromeAPIの興味深い読み物

バックグラウンドページとコンテンツスクリプト間のメッセージング。IIRCでは、バックグラウンドページでのみCHromeTabAPIを使用できます。 http://developer.chrome.com/extensions/messaging.html

Chrome Tab API http://developer.chrome.com/extensions/tabs.html

于 2012-11-07T12:47:04.773 に答える
0

ちょっとした補足として、中央ボタンはおそらく良い考えではありません。なぜなら、それは最も冗長であり、ユーザーが使用する頻度が最も低く、一部のデバイス、特にタッチスクリーンでは欠落している可能性さえあるからです. 最初のマウスボタンを使用することを支持して、アプローチを再検討する必要があります。これは、あなたが言及したブラウザアクションボタン、またはさらに良いことに、ページアクションボタンを使用して拡張機能を条件付きで有効または無効にすることができます。特定のドメインでのみ動作します。

関心のあるコード (中央のボタン) については、拡張機能について特別なことは何もありません。コンテンツ スクリプトが挿入されるページの DOM を操作する通常の JavaScript です。たとえば、次のようなクリックのハンドラーをバインドできます。

document.onmousedown = mouseDown;

function mouseDown(e)
{
  var midclick;
  if (!e) var e = window.event;
  if (e.which) midclick = (e.which == 2);
  else if (e.button) midclick = (e.button == 4); // MS
  if (midclick)
  {
    var target;
    if (e.target) target = e.target;
    else if (e.srcElement) target = e.srcElement;
    if (target.innerHTML) // do stuff what you need here,
    {                     // assume get all the content as url
      openNewURL(target.innerHTML);
    }
  }
}

function openNewURL(newurl)
{
  chrome.extension.sendMessage({url: newurl}, function(response) {});
}

あなたの最初の理解は正しかった: マニフェストとコンテンツ スクリプト、および背景ページが必要です。

バックグラウンド ページで受信リクエストを処理します。

chrome.extension.onMessage.addListener(
function(request, sender, sendResponse)
{
  if (request.url)
  {
    chrome.tabs.create({url: request.url});
  }
});
于 2012-11-07T13:13:00.613 に答える
0

manifest.json でコンテンツ スクリプトを宣言する必要があります。これは、ページごとに実行される js ファイルです (プロパティを "all_frames" に true に設定した場合は、ドキュメント内の各フレームに対して再帰的に実行されます)。

このサンプル manifest.json を確認してください。

{
  "name": "MyExtension",
  "version": "0.2",
  "manifest_version": 2,
  "description": "My description.",
  "content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["jquery.js", "my_javascript_to_execute_on_each_frame.js"],
    "all_frames": true
  }
  ]
}

このマニフェストでは、jquery (オプション) と、マウス クリックをリッスンし、現在のドキュメントの URL を変更して新しいタブを開くコードを含む 1 つの js ファイルを提供する必要があります。このスクリプトは次のようになります。

​$(document).click(function(e)​ {
    var urlToGo = window.location.href;

    // middle button
    if (e.which === 2) {
        urlToGo = ... // do your url hackery =)
        window.open(urlToGo);       
        e.stopPropagation();
    }

});
    ​   
于 2012-11-07T13:06:09.147 に答える