2011-10-08 9 views
9

Jestem nowy w rozszerzeniach chrome. Chciałbym utworzyć proste rozszerzenie chrome, które wyskakuje alert z tytułem aktualnej strony html. Kiedy wykonuję: alert(document.title), Nie otrzymuję tego, ponieważ obiekt dokumentu nie należy do strony, ale do skryptu rozszerzenia (czy jest poprawny?) Jak uzyskać właściwy obiekt dokumentu?uzyskiwanie dostępu do bieżącej strony html z rozszerzenia chrome

Odpowiedz

10

skrypty Treści są najprostszym sposobem, aby przejść:

Rozwiń swój plik manifestu z tym kodem:

... 
"content_scripts": [ 
    { 
    "matches": ["http://urlhere/*"], 
    "js": ["contentscript.js"] 
    } 
], 
... 

skryptu Zawartość (automatycznie wykonywane na każdej stronie, jak wspomniano w matches w pliku manifestu):

alert(document.title) 

zaletą korzystania z treści skryptów ponad chrome.extension.* metody jest to, że rozszerzenie nie wymaga sc uprawnienia ary, takie jak tabs.


Zobacz także:

+0

@ Rob W: I właśnie zadał podobne pytanie http://stackoverflow.com/questions/1964225/accessing-current-tab -dom-object-from-popup-html. Ale w moim przypadku rozszerzenie wysyła informacje z bieżącej karty do mojej aplikacji do zakładek. Sposób, w jaki rozumiem twoją odpowiedź, zatem każda strona, którą spróbuję dodać do zakładek, musi być zawarta w pliku manifestu. Czy to jest poprawne? W takim przypadku będzie to bezużyteczne. Dzięki. – Zeynel

+1

@Zeynel Następnie dodaj '" * "': '" matches ": [" * "],' –

+0

@ Rob W: Thanks. Być może nie robię tego dobrze, ale musiałem wprowadzić "" mecze ": [" http: // */* "]," aby działał zgodnie z tym http://code.google.com/chrome/extensions /match_patterns.html w przeciwnym razie dostałem 'Missing scheme separator', którego jeszcze nie wypróbowałem, ale przynajmniej przesłane rozszerzenie. Dzięki jeszcze raz. – Zeynel

1

Na co robisz wszystko co nee d, aby zrobić to

chrome.tabs.executeScript({ 
    code: 'alert(document.title)' 
}) 

chrome.tabs.executeScript API pozwala na wykonywanie kodu JavaScript w bieżącej strony zamiast w rozszerzeniu tak to działa dobrze, ale jeśli chcesz używać nazwy strony później w bardziej złożonej rozszerzeniu niż bym po prostu robić to, co pimvdb nie

+1

Czy to wymagałoby dodania "niebezpiecznych eval" do CSP? – Xan

0

używam tego rozszerzenia, aby zrobić coś podobnego:

main.js:

(function(){window.prompt('Page title:', document.title)})()

manifest.json:

{ 
"background": {"scripts": ["background.js"]}, 
"browser_action": { 
"default_title": "popup_title" 
}, 
"name": "popup_title", 
"description": "Display the page title for copying", 
"permissions": [ 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
], 
"version": "1.0", 
"manifest_version": 2 
} 

background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {file: "main.js"}) 
}); 
Powiązane problemy