2013-03-07 74 views
1

我知道這個問題已經被問了很多次,我已經檢查了所有的解決方案並研究了一切。但是,這根本不適合我。在WebView中調用JavaScript函數

我不知道我在做什麼錯。有人可以幫我嗎?

我加載本地HTML文件在我WebView,然後調用JavaScript函數:

wv.loadUrl("file:///android_asset/sample.html"); 
wv.getSettings().setJavaScriptEnabled(true); 
JavascriptInterface javasriptInterface = new JavascriptInterface(MyActivity.this); 
wv.addJavascriptInterface(javasriptInterface, "MyInterface"); 
wv.loadUrl("javascript:loadpath()"); 

的HTML文件是:

<html> 
<head> 
</head> 

<body> 
<script type="text/javascript"> 
    function callDoSomething() { 
     // Do something 
    } 

    function loadpath() { 
     // Is not called no matter whatever operation I do here. Just printing a string, setting variable, android callback anything. 
     document.write("Hi"); 
     document.getElementById('img').src = "path.png"; 
    } 
</script> 

<form name="myForm" action="FORM"> 
    <img src="" alt="Autofill" /><br> 
    <input type="button" value="Submit" onClick="callDoSomething()" /> 
</form> 

</body> 
</html> 

回答

6

loadUrl()是異步的。您正在呼叫您的第二個loadUrl()方式過早。您需要等到您的頁面加載完畢,或許可以使用WebViewClient並注意onPageFinished()

+0

哦!感謝那些信息..其實我的要求是將參數傳遞給HTML頁面。起初,我在第一個loadUrl路徑中嘗試了字符串查詢。但是,這是給網頁找不到錯誤,並在搜索後發現這種方法。無論如何,我會嘗試用WebViewClient實現onPageFinished()。非常感謝! – Rachit 2013-03-07 20:58:51

+0

@Rachit:是的,你不能在本地路徑上使用查詢參數,只能使用Web URL。但是,請記住,您的JavaScript代碼可以通過JavaScriptInterface上公開的方法調用迴應用程序以檢索此數據,並且您的腳本通過MyInterface上的調用進行檢索。你不需要再次調用'loadUrl()' - 讓腳本*拉*數據,而不是你推送數據。 – CommonsWare 2013-03-07 21:01:28

+0

是的,我沒有想到這一點。但性能明智,哪種方法會更快?其中任何一個參數都可以。但是,如果我不得不在不同時間交換多個參數,是否有一個權衡? – Rachit 2013-03-07 21:08:30