2012-06-26 14 views
6

をスクリプトを実行し、私は唯一のトップレベルのフレームに、または特定のタブ内のすべてのフレームにスクリプトを実行する方法を見ることができます:は、特定のフレームに

details.allFramestrueであれば、それはそれぞれで実行されます
chrome.tabs.executeScript(integer tabId, object details, function callback) 

サブフレームですが、falseの場合はトップレベルのフレームでのみ実行されます。スクリプトを実行するにはframeIdをどうすればよいですか?

答えて

5

私が知る限り、あなたはできません。その代わりに、allFrames: trueと設定し、適切なフレームであるかどうかを検出するためにコンテンツスクリプトにjavascriptを書き、正しいフレームでない場合は何もせずに戻ります。

+0

私はそうしなければならないと思います。物事がどのフレームで実行されているかを検出するためのヒント? – Daniel

+0

コンテンツスクリプトでドキュメントURLを取得して、それが目的のスクリプトであるかどうかを確認することができます – Siddhi

+3

これはすべてが間違っているように見えます - なぜ 'frameId'を指定できませんか?罰金、私は泣き言を止めるでしょう。 – Daniel

2

これは私がこれと同じ問題を解決するために行ってきましたルートです:documentation

から

https://github.com/Rob--W/chrome-api/blob/master/chrome.tabs.executeScriptInFrame/chrome.tabs.executeScriptInFrame.js

function alertCookie(tabId, frameId) { 
chrome.tabs.executeScriptInFrame(tabId, { 
    frameId: frameId, 
    code: '// This code runs in one frame, specified via frameId \n' + 
      'alert(location.href);' + 
      'document.cookie;' 
}, function(results) { 
    if (!results) { 
     alert('Failed to execute code. See background page for details.'); 
     return; 
    } 
    var cookie = results[0]; 
    alert('Found cookie: ' + cookie); 
}); 

}

1

allFramesがtrueの場合、そのJavaScriptや意味現在のページのすべてのフレームにCSSを注入する必要があります。デフォルトではfalseで、トップフレームにのみ挿入されます。 trueでframeIdが設定されている場合、コードは選択されたフレームとそのすべての子フレームに挿入されます。

関連する問題