2011-01-28 54 views
0

タブのタブIDを取得して他のタブで使用するときに問題が発生しました。Chrome拡張機能でタブIDを取得する際の問題

開いているタブは1つ(google.com)コンテンツスクリプトを使用してgoogle.comにボタンを配置しました。 "cricinfo.com"というURLをクリックすると、ボタンが作成されます。 contentscript.js

$(ボディ).prepend( '(開き)

</button><textarea id="followup_text"></textarea>'); 


chrome.extension.sendRequest({"acturl":'http://cricinfo.com',"type":""}); 

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
    if(request.greeting=="hello") 
{ 
alert(sender.tab.url); 
sendresponse({farwell:"thanks"}); 
} 
else 
sendresponse({farwell:"not recieved"}); 
}); 

}); 

Background.html

<script type="text/javascript" charset="utf-8"> 


     chrome.extension.onRequest.addListener(
     function(request, sender, sendResponse) { 

     chrome.tabs.create({"url":request.acturl,"selected":false},function(tab){ 

     }); 

    }); 
    chrome.tabs.getSelected(null, function(tab){ 
     chrome.extension.sendRequest(tab.id, {greeting:"hello"},function(response){console.log(response.farwell);}); 
    } 
    }) 

</script> 

今cricinfo.comはespncricinfo」にリダイレクトします。 co.jp "ので、このURLを元のタブ(google.comなど)に表示して、テキストエリア#follow_textに表示させます。

これを実行するには、espncricinfo.comでbackground.htmlからリクエストを送信するためのgoogle.comのtabIDが必要です。拡張機能では、contentscriptsのタブを使用することはできません。私はbackground.htmlでそれを使用することができません。

ありがとうございました。私がはっきりしないかどうかは分かりません。

+0

したがって、リダイレクトの問題はありますか。 cricinfo.comまたはespncricinfo.comをテキストエリアに表示しますか?この特定のサイトの拡張機能を構築しているのですか、一般的な場合には機能するはずですか? – serg

+0

リダイレクト(または更新)された後にタブURLを表示したい、つまりespncricinfo.comをテキストエリアに表示したいとします。そして、私はそれが親タブ(google.com)でのみ動作するように頼んだので、cricinfoのタブからいくつかの情報が必要になるので(リダイレクトされた後にURLを知らないと考えると)、これもうまくいくはずです。どうすればいいですか? – RaviTeja

+0

これはどうでしょうか?新しいタブを作成して覚えておいてから、そのタブで起こっているすべてのURLチャネルを監視し、それらのURLをテキストエリアに表示します。それは働くだろうか?ちょうどリダイレクトするのは難しいですが、ユーザーのリダイレクト(リンクをクリック)からhttpリダイレクトを分離するのは難しいでしょう。 – serg

答えて

2

まあ、ここにいくつかのコードがありますが、それは一種の解決策です。そのトリックは、あなたがchrome.tabs.onUpdatedに耳を傾けたときに、すでにリダイレクトされたURLを受信して​​いることです(リダイレクトがなかった場合、直接URLを受け取ります)。

var createdTabId = 0; 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if(tabId == createdTabId && changeInfo.status == "loading") { 
     createdTabId = 0; 

     //tab.url contains redirected or direct url, send it to google tab 
     var tabUrl = tab.url; 
     chrome.tabs.getSelected(null, function(tab){ 
      chrome.tabs.sendRequest(tab.id, {tabUrl: tabUrl}); 
     }); 

    } 
}); 

chrome.tabs.create({"url":"http://cricinfo.com","selected":false},function(tab){ 
    createdTabId = tab.id; 
}); 
関連する問題