2012-06-26 18 views
6

posso solo vedere come eseguire uno script nel frame di livello superiore o in tutti i fotogrammi in una certa scheda:eseguire lo script nel specifica cornice

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

Dove se details.allFrames è true allora sarà eseguito in ciascuna subframe, ma se è falso, verrà eseguito solo nel frame di primo livello. Come posso fornire un frameId per eseguire lo script?

risposta

5

Per quanto ne so, non è possibile. Invece, impostare allFrames: true e scrivere javascript nello script di contenuto per rilevare se è il frame corretto e tornare senza fare nulla se non è il frame corretto.

+0

Immagino che dovrà fare ... Sigh. Qualche consiglio su come determinare in quale frame è in esecuzione la cosa? – Daniel

+0

È possibile ottenere l'URL del documento nello script del contenuto e controllare se è lo script che si desidera – Siddhi

+3

Questo tutto sembra solo sbagliato - perché non è possibile specificare un 'frameId'? Bene, smetterò di piagnucolare. – Daniel

2

Questo è il percorso sono andato per risolvere questo stesso problema:

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

Dal documentation

Se allFrames è vero, implica che il JavaScript o Il CSS dovrebbe essere iniettato in tutti i frame della pagina corrente. Di default, è falso e viene solo iniettato nel frame superiore. Se è impostato true e frameId, il codice viene inserito nel frame selezionato e in tutti i relativi frame figlio.

Problemi correlati