2012-06-26 23 views
6

widzę tylko jak wykonać skrypt w górnej ramce poziomu lub we wszystkich klatek w pewnym zakładce:Wykonaj skrypt w konkretnej ramce

chrome.tabs.executeScript(integer tabId, object details, function callback) 

Gdzie jeśli details.allFrames jest true następnie zostanie wykonany w każdym podramki, ale jeśli jest ona fałszywa, będzie wykonywana tylko w ramce najwyższego poziomu. Jak mogę zapewnić frameId, aby uruchomić skrypt?

Odpowiedz

5

O ile wiem, nie można. Zamiast tego ustaw allFrames: true i napisz javascript w skrypcie treści, aby wykryć, czy jest to poprawna klatka i powróć bez robienia czegokolwiek, jeśli nie jest poprawną ramką.

+0

Myślę, że to będzie musiało ... Westchnienie. Jakieś wskazówki dotyczące wykrycia, w jakiej ramce jest wykonywana? – Daniel

+0

Możesz uzyskać adres URL dokumentu w skrypcie treści i sprawdzić, czy jest to skrypt, który chcesz. – Siddhi

+3

To wszystko wydaje się błędne - dlaczego nie możesz określić 'frameId'? W porządku, przestanę marudzić. – Daniel

2

Jest to trasa udałem się do rozwiązania tego samego problemu:

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

Z documentation

Jeśli allFrames jest prawdziwa, oznacza, że ​​JavaScript lub CSS należy wstrzyknąć do wszystkich ramek bieżącej strony. Domyślnie jest to wartość false i jest wstrzykiwana tylko do górnej ramki. Jeśli ustawiona jest wartość true i frameId, kod jest wstawiany do wybranej klatki i wszystkich jej ramek potomnych.