2012-04-24 5 views
1

私は延長をして遊んでいます。ユーザーが拡張機能をインストールしている場合は、Webページでクリックしたリンクをキャプチャしたいと考えています。これをどうやって行うのかは分かりませんが、それは単純なようです。プラグインがインストールされ、有効になっている限り、この機能を有効にしたいと思いますが、ユーザーがツールバーの中で何かをやって「アクティブにする」必要がないようにしてください。ユーザーがページをクリックするリンクをキャプチャします

開始方法がわかりません。そして、私は、あまりにも多くのJSファイルを持っているが、そのうちの1人がコンソールにログを取ろうとしていると思う。どちらもありません。私の最終目標は、特定の場所に行くとそれらをイントラネットページにリダイレクトすることです。

background.js

var redirectedSites = ["https://www.facebook.com/profile.php?id=<SOMEPROFILEID>"]; 
// when the browser tries to get to a page, check it against a list 
chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     console.log('is this even getting hit?'); 
     for(var i=0; i < redirectedSites.length; ++i) { 
      // if the attempt is to a listed site, redirect the request 
      if(details.url == redirectedSites[i]) 
       return {redirectUrl: "http://intranet/landing?from=" + details.url }; 
     } 
    }, 
    {urls: ["*://www.facebook.com/*"]}, 
    ["blocking"] 
); 

manifest.jsonを

{ 
"name": "Capture Click", 
"version": "0.1", 
"description": "Simple tool that logs clicked links.", 
"permissions": [ 
"tabs", 
"webRequest", 
"webRequestBlocking", 
    "https://*.facebook.com/*" 
], 
"background": { 
    "scripts": ["background.js"] 
}, 
"manifest_version": 2 
} 
+1

メッセージリスナーは2つありますが、メッセージ送信者はありません。すべてのページにjQueryコードを実行し、メッセージを送信する[コンテンツスクリプト](http://code.google.com/chrome/extensions/content_scripts.html)を含める必要があります。 – apsillers

+0

OK本当にそのページを読んでいます。それを指摘してくれてありがとう。 :) – Nathan

+0

私のlocalhostでうまくいったが、その後Facebookで試してみたところ、同じタスクを何度も繰り返して10回中1回console.logがヒットした。奇妙な。 – Nathan

答えて

2

私はコメントでいくつかのアドバイスを与えてくれたが、あなたの実際の大きな問題を解決する最良の方法はですa webRequestハンドラー:

var redirectedSites = ["http://www.google.com/foobar", ...]; 
// when the browser tries to get to a page, check it against a list 
chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     for(var i=0; i < redirectedSites.length; ++i) { 
      // if the attempt is to a listed site, redirect the request 
      if(details.url == redirectedSites[i]) 
       return {redirectUrl: "http://intranet/landing?from=" + details.url }; 
     } 
    }, 
    {urls: ["*://www.google.com/*"]}, 
    ["blocking"]); 

これは本当に簡単な例ですが、あなたがそのアイデアを得ることを願っています。ここで、details.urlは、ユーザーが取得しようとしているページで、返されたオブジェクトには、ページの訪問をリダイレクトするredirectUrlプロパティがあります。私の例では、ターゲットサイトのリストに対してdetails.urlをチェックしています。より堅牢な正規表現などを使用することができます。

これはクリックされたリンクや入力されたURLだけでなく、リソース(スクリプト、画像)やAjaxリクエストにも影響することに注意してください。

+0

ああ...これは有望そうです。 background.jsをこれに変更して報告します。今ではこのエラーが発生していますが、Uncaught TypeError:未定義の(匿名関数)のプロパティ 'onBeforeRequest'を読み取れません。 – Nathan

+1

これはコンテンツスクリプトに配置できないようです。私がそれを置く場所を見つけるために、Lemmeをもっと見てください。たぶん私は今コンテンツスクリプトは必要ありません... – Nathan

+1

ああ、ええ、言及を忘れてしまった。あなたの背景ページに入ります。あなたはコンテンツスクリプトは必要ありません。 – apsillers

関連する問題