2012-09-05 53 views
0
WebView myWebView = (WebView) findViewById(R.id.webview);     
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setPluginsEnabled(true);   
    myWebView.loadUrl("file:///android_asset/index.html"); 
    myWebView.loadUrl("javascript:hello()"); 

它不適用於4.0仿真器或實際設備。我有一個像不能從活動調用javascript函數

<script type="text/javascript">..</script>

,我可以從Firefox的使用沒有問題控制檯火在HTML中適當標籤(它不叫警報命令,我知道它不android系統工作)

我出解決方案,請幫助我。

順便說一下,這個函數調用在這裏似乎沒用,因爲它用於測試,如果這個工作正常,我會給出一個參數。

編輯:

<h1 id="title"></h1> 
.... 

<script type="text/javascript"> 
function hello() 
{ 
    console.log("hello"); 
    var title = document.getElementById("title"); 
    title.innerHTML = "hello";  
} 
</script> 
+1

你想javascript做什麼?你怎麼知道它沒有調用'hello()'函數? –

+0

另外,你是否試圖從JavaScript中調用Android中的方法?這需要使用'WebView'上的'addJavascriptInterface()'方法。 –

+0

它是一個測試函數,它應該設置一個元素的值,但它沒有。我知道js代碼是無問題的,因爲在同一個html中有另一個按鈕,可以毫無問題地激發相同的功能。此外,logcat警告我一個錯誤:未捕獲的referenceerror:hello沒有定義在null:1 – FireFly

回答

2

的問題是,有沒有保證,當你調用JavaScript頁面已經被加載。確保只在頁面完全加載時調用javascript函數。

下面的代碼(引自http://lexandera.com/2009/01/injecting-javascript-into-a-webview/)會給你一個提醒。

final WebView webview = (WebView)findViewById(R.id.browser); 
/* JavaScript must be enabled if you want it to work, obviously */ 
webview.getSettings().setJavaScriptEnabled(true); 

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

webview.loadUrl("http://code.google.com/android"); 
+0

非常感謝,我沒有指望同步,因爲這不是web編程而是該死的。 – FireFly