2012-10-10 56 views
0

此鏈接:http://lexandera.com/category/webview_examples/說,你可以插入JavaScript到由WebView中呈現的網頁如下:的WebView和javascript

webview.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) 
    { 
    webview.loadUrl("javascript:(function() { " + 
      "document.getElementsByTagName('body')[0].style.color = 'red'; " + 
      "})()"); 
    } 
}); 

我希望把它一步的注入是被重點執行的功能按。

我使用:

webView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public void onPageFinished(WebView view, String url) 
     { 

      webView.loadUrl("javascript:function keyHandler(e) { " + 
       "document.getElementsByTagName('body')[0].style.color = 'red'; " + 
         "}");     

     }   
    }); 

和頁面已經寫入,包括document.onkeypress = keyHandler這AFAIK應該鉤住我keyHandler函數出現在頁面上的任何關鍵事件。

問題是,它不工作。我希望它在按下某個鍵時將文本改爲紅色。相反,在我按任意鍵之前,頁面被渲染並且文本變成紅色。

我誤解了這是怎麼一起工作的?

我只是試圖破解一些東西,整個過程就是爲我的僱主在Android WebView中呈現的網頁提供自定義javascript響應。

回答

0

loadUrl()您正在執行JavaScript而不是將其添加到文檔中。你必須在你執行腳本做的是一樣的東西

webView.setWebViewClient(new WebViewClient(){ 

    @Override 
    public void onPageFinished(WebView view, String url) 
    { 

     webview.loadUrl("javascript:function() { " + 
      "var script = document.createElement('script'); " + 
      "script.innerHTML = 'function keyHandler(e) { document.getElementsByTagName('body')[0].style.color = 'red'; }'" + 
      "document.getElementsByTagName('head')[0].appendChild(script); " + 
     "}");     

    }   
}); 
+0

我不跟隨....你說我得:您發佈的代碼添加到網頁中,之間界定的東西[]中的webView.loadUrl() 然後網頁將自動調用我的JavaScript? – user1126515

+0

你想要做的是動態地將keyHandler(e)函數添加到文檔中,對嗎?這意味着你必須使用loadUrl()調用一個javascript函數,該函數的確如此。看到我修改後的答案。順便說一句:我沒有測試過,這只是給你一個想法,所以如果你複製並經過它並不立即運行,請不要開槍。 – SimonSays

+0

感謝您的澄清。我想我明白了。 我以爲我所要做的就是在loadUrl()中定義腳本。但實際上,我必須定義它並將其附加到頁面上。這是正確的解釋嗎? 我意識到這段代碼沒有保修。我很高興能夠說出這些東西,例如獎金。 – user1126515