2013-03-20 10 views
5

Mam tę funkcję js w moim kodzie HTML strony.Wykonaj stronę internetową js ze skryptu zawartości rozszerzenia chrome

function update() { 
    document.getElementById("textbox ").value = updatetext; 
} 

Po uruchomieniu "update()" z poziomu konsoli Chrome działa.
Ale gdybym wykonać z chromem rozszerzeniu

chrome.tabs.executeScript(tab.id, {code: "update();"}, function(result){}); 

Mówi, aktualizacja nie jest zdefiniowana. Ale jeśli zamieniam na "alert (" ok ")", to działa.
Potem wykonać

eval("update()") 

w Chrome rozszerzenie zawartości skryptu. Mówi też "aktualizacja nie jest zdefiniowana".

Co mogę zrobić, aby wywołać funkcję js na stronie internetowej?

+0

możliwym duplikatu [Budowanie Chrome Extension - wstrzyknąć kod na stronie za pomocą skryptu zawartość ] (http://stackoverflow.com/questions/9515704/building-a-chrome-extension-inject-code-in-a-page-using-a-content-script) – Xan

+0

Lub jeszcze lepiej w odniesieniu do pytań w komentarze: [Kod wykonawczy na poziomie strony od Background.js i zwracanie wartości] (http://stackoverflow.com/questions/26140443/executing-code-at-page-level-od-background-js-and-reading -the-value/26141393) – Xan

Odpowiedz

7

Chrome wykonuje skrypty treści w piaskownicy, więc trzeba wstrzyknąć skrypt inline interakcji ze strony internetowej:

var injectedCode = 'update()'; 
var script = document.createElement('script'); 
script.appendChild(document.createTextNode('('+ injectedCode +')();')); 
(document.body || document.head || document.documentElement).appendChild(script); 
+1

dziękuję, jeśli chcę wykonać funkcję dowcipną js h zwraca wartość? jak mogę uzyskać wartość zwracaną? @ KAdot –

+0

Możesz zapisać wartość zwracaną jako element ukrytego elementu DOM, a następnie odczytać go ze skryptu treści. – KAdot

+0

Czy możesz wysłać przykład kodu? Próbowałem document.documentElement.setAttribute(), ale może ustawić tylko wartość ciągu, nie działa na obiekcie js. Czy jest jakiś sposób na zwrócenie obiektu js? @ KAdot –

Powiązane problemy