Beschrijving
Gebruik de chrome.devtools.inspectedWindow API om te communiceren met het geïnspecteerde venster: verkrijg de tabblad-ID voor de geïnspecteerde pagina, evalueer de code in de context van het geïnspecteerde venster, laad de pagina opnieuw of verkrijg de lijst met bronnen op de pagina.
Ga naar Overzicht van DevTools API's voor een algemene inleiding over het gebruik van API's voor ontwikkelaarstools.
De property tabId biedt de tabblad-ID die je kunt gebruiken met de API-aanroepen browser.tabs.*. De browser.tabs.* API wordt vanwege beveiligingsoverwegingen niet weergegeven op de pagina's van de extensie Developer Tools. Je moet de tabblad-ID doorgeven aan de achtergrondpagina en de browser.tabs.* API-functies vanaf daar aanroepen.
De methode reload kan worden gebruikt om de geïnspecteerde pagina opnieuw te laden. Daarnaast kan de beller een overschrijving opgeven voor de user-agent-tekenreeks, een script dat vroeg wordt geïnjecteerd wanneer de pagina wordt geladen of een optie om het opnieuw laden van gecachte bronnen af te dwingen.
Gebruik de aanroep getResources en de gebeurtenis onResourceContent om de lijst met bronnen (documenten, stylesheets, scripts, afbeeldingen, enzovoort) op de geïnspecteerde pagina op te halen. De methoden getContent en setContent van de klasse Resource en de gebeurtenis onResourceContentCommitted kunnen worden gebruikt om wijziging van de broncontent te ondersteunen, bijvoorbeeld door een externe editor.
Manifest
De volgende sleutels moeten in het manifest worden gedefinieerd om deze API te gebruiken.
"devtools_page"Code uitvoeren in het geïnspecteerde venster
De methode eval biedt extensies de mogelijkheid om JavaScript-code uit te voeren in de context van de geïnspecteerde pagina. Deze methode is krachtig als je deze in de juiste context gebruikt en gevaarlijk als je deze onjuist gebruikt. Gebruik de methode tabs.executeScript, tenzij u de specifieke functionaliteit nodig heeft die de methode eval biedt.
Dit zijn de belangrijkste verschillen tussen de methoden eval en tabs.executeScript:
- De methode
evalgebruikt geen geïsoleerde wereld voor de code die wordt geëvalueerd, dus de JavaScript-status van het geïnspecteerde venster is toegankelijk voor de code. Gebruik deze methode als toegang tot de JavaScript-status van de geïnspecteerde pagina is vereist. - De uitvoeringscontext van de code die wordt geëvalueerd, omvat de API voor de console voor tools voor ontwikkelaars.
De code kan bijvoorbeeld
inspecten$0gebruiken. - De geëvalueerde code kan een waarde retourneren die wordt doorgegeven aan de callback van de extensie. De geretourneerde waarde moet een geldig JSON-object zijn (het mag alleen primitieve JavaScript-typen en acyclische verwijzingen naar andere JSON-objecten bevatten). Wees extra voorzichtig bij de verwerking van de gegevens die je ontvangt van de geïnspecteerde pagina. De uitvoeringscontext wordt in wezen beheerd door de geïnspecteerde pagina. Een schadelijke pagina kan van invloed zijn op de gegevens die worden teruggestuurd naar de extensie.
Een pagina kan meerdere verschillende JavaScript-uitvoeringscontexten bevatten. Elk frame heeft een eigen context, plus een extra context voor elke extensie met contentscripts die in dat frame worden uitgevoerd.
De methode eval wordt standaard uitgevoerd in de context van het hoofdframe van de geïnspecteerde pagina.
De methode eval heeft een optioneel tweede argument dat je kunt gebruiken om de context aan te geven waarin de code wordt geëvalueerd. Dit options-object kan een of meer van de volgende sleutels bevatten:
frameURL- Gebruik dit om een ander frame op te geven dan het hoofdframe van de geïnspecteerde pagina.
contextSecurityOrigin- Gebruik dit om een context binnen het opgegeven frame te selecteren op basis van de web-oorsprong.
useContentScriptContext- Als dit waar is, wordt het script uitgevoerd in dezelfde context als de contentscripts van de extensie. (Dit is gelijk aan de eigen web-oorsprong van de extensie invoeren als de beveiligingsoorsprong van de context.) Dit kan worden gebruikt om gegevens uit te wisselen met het contentscript.
Voorbeelden
De volgende code controleert de versie van jQuery die wordt gebruikt door de geïnspecteerde pagina:
browser.devtools.inspectedWindow.eval(
"jQuery.fn.jquery",
function(result, isException) {
if (isException) {
console.log("the page is not using jQuery");
} else {
console.log("The page is using jQuery v" + result);
}
}
);
Als je deze API wilt proberen, installeer je de API-voorbeelden voor devtools uit de repository chrome-extension-samples.
Typen
Resource
Een bron op de geïnspecteerde pagina, zoals een document, een script of een afbeelding.
Eigenschappen
-
url
tekenreeks
De URL van de bron.
-
getContent
ongeldig
Haalt de content van de bron op.
De functie
getContentziet er zo uit:() => {...}-
returns
Promise<object>
Chrome 151+ browser.* sinds Chrome 152Een functie die resourcecontent krijgt als het verzoek is afgerond.
-
-
setContent
ongeldig
Stelt de content van de bron in.
De functie
setContentziet er zo uit:(content: string, commit: boolean) => {...}
-
content
tekenreeks
Nieuwe content van de bron. Alleen bronnen met het teksttype worden op dit moment ondersteund.
-
toewijzen
booleaans
Waar als de gebruiker klaar is met het bewerken van de bron en de nieuwe content van de bron moet worden bewaard. Onwaar als dit een kleine wijziging is die is gestuurd terwijl de gebruiker de bron bewerkt.
-
returns
Promise<object>
Chrome 151+ browser.* sinds Chrome 152Een functie die wordt aangeroepen als het verzoek is afgerond.
-
Eigenschappen
tabId
De ID van het tabblad dat wordt geïnspecteerd. Deze ID kan worden gebruikt met chrome.tabs.* API.
Type
getal
Methoden
eval()
browser.devtools.inspectedWindow.eval(
expression: string,
options?: object,
): Promise<object>
Evalueert een JavaScript-expressie in de context van het hoofdframe van de geïnspecteerde pagina. De expressie moet resulteren in een json-compatibel object, anders wordt er een uitzondering gegenereerd. De eval-functie kan een fout aan de DevTools-zijde of een JavaScript-uitzondering melden die optreedt tijdens de evaluatie. In beide gevallen is de parameter result van de callback undefined. In het geval van een fout aan de DevTools-kant is de parameter isException niet-null en is isError ingesteld op true en code ingesteld op een foutcode. In het geval van een JavaScript-fout wordt isException ingesteld op true en value op de tekenreekswaarde van het gegenereerde object.
Parameters
-
expressie
tekenreeks
Een expressie die u wilt evalueren.
-
opties
object optioneel
De parameter options kan een of meer opties bevatten.
-
frameURL
tekenreeks optioneel
Als je dit opgeeft, wordt de expressie geëvalueerd in het iframe waarvan de URL overeenkomt met de opgegeven URL. De expressie wordt standaard geëvalueerd in het bovenste frame van de geïnspecteerde pagina.
-
scriptExecutionContext
tekenreeks optioneel
Chrome 107+ -browser.* sinds Chrome 152Evalueer de expressie in de context van een contentscript van een extensie die overeenkomt met de opgegeven oorsprong. Als deze parameter wordt opgegeven, overschrijft scriptExecutionContext de instelling 'true' voor useContentScriptContext.
-
useContentScriptContext
booleaans optioneel
Evalueer de expressie in de context van het contentscript van de aanroepende extensie, op voorwaarde dat het contentscript al is geïnjecteerd in de geïnspecteerde pagina. Als dat niet het geval is, wordt de expressie niet geëvalueerd en wordt de callback aangeroepen met de uitzonderingsparameter ingesteld op een object waarvan het veld
isErroris ingesteld op true en het veldcodeis ingesteld opE_NOTFOUND.
-
Retourzendingen
-
Promise<object>
Chrome 151+ browser.* sinds Chrome 152Een functie die wordt aangeroepen als de evaluatie is afgerond.
getResources()
browser.devtools.inspectedWindow.getResources(): Promise<Resource[]>
Haalt de lijst met bronnen op van de geïnspecteerde pagina.
Retourzendingen
-
Promise<Resource[]>
Chrome 151+ browser.* sinds Chrome 152Een functie die de lijst met bronnen ontvangt wanneer het verzoek is afgerond.
reload()
browser.devtools.inspectedWindow.reload(
reloadOptions?: object,
): void
Laadt de geïnspecteerde pagina opnieuw.
Parameters
-
reloadOptions
object optioneel
-
ignoreCache
booleaans optioneel
Als deze waarde True is, slaat het laadprogramma het cachegeheugen over voor alle geïnspecteerde paginabronnen die worden geladen voordat de gebeurtenis
loadwordt geactiveerd. Het effect is vergelijkbaar met het indrukken van Ctrl+Shift+R in het geïnspecteerde venster of in het venster Hulpprogramma's voor ontwikkelaars. -
injectedScript
tekenreeks optioneel
Als dit is opgegeven, wordt het script onmiddellijk na het laden in elk frame van de geïnspecteerde pagina geïnjecteerd, vóór de scripts van het frame. Het script wordt niet geïnjecteerd na volgende herlaadbeurten, bijvoorbeeld als de gebruiker op Ctrl+R drukt.
-
userAgent
tekenreeks optioneel
Als je een tekenreeks invoert, overschrijft deze de waarde van de HTTP-header
User-Agentdie wordt gestuurd terwijl de bronnen van de geïnspecteerde pagina worden geladen. De tekenreeks overschrijft ook de waarde van de propertynavigator.userAgentdie wordt geretourneerd naar scripts die worden uitgevoerd op de geïnspecteerde pagina.
-
Evenementen
onResourceAdded
browser.devtools.inspectedWindow.onResourceAdded.addListener(
callback: function,
)
Wordt geactiveerd als er een nieuwe bron wordt toegevoegd aan de geïnspecteerde pagina.
Parameters
-
callback
functie
De parameter
callbackziet er zo uit:(resource: Resource) => void
-
resource
-
onResourceContentCommitted
browser.devtools.inspectedWindow.onResourceContentCommitted.addListener(
callback: function,
)
Wordt geactiveerd als een nieuwe revisie van de bron wordt vastgelegd (bijvoorbeeld als de gebruiker een bewerkte versie van de bron opslaat in de Tools voor ontwikkelaars).