2013-03-07 53 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

相关问题