Android-使用addJavaScriptInterface返回从Javascript值

所以我知道还有其他岗位解决同样的问题,我想我已经跟随他们的信,但可惜没有用。 我想了解如何获得我的应用程序使用JavaScript交互。 我只是希望能够从我的javascript返回一个值到我的活动。
这里是我的活动:

public class JSExample extends Activity { WebView mWebView; String mString; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView)findViewById(R.id.mWebView); mWebView.addJavascriptInterface(new ClsAccessor(), "accessor"); String html = getAssetsContent("jsinterface.html"); mWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null); // Log.d("YO!", mString); } private String getAssetsContent(String filename){ ..... } private void closeStream(BufferedReader stream) { ..... } class ClsAccessor{ public void setValue(String value){ JSExample.this.mString = value; } }

这里是一个包含我想运行的JavaScript通过我的WebView加载的HTML文件:

<!DOCTYPE html> <html> <head> <script language="javascript"> accessor.setValue('Hello!'); </script> </head> <body> <h1>Testing</h1> </body> </html>

这是行不通的。 当我运行“Log.d(”哟!代码“,mString);” 注释掉我得到一个空指针异常,这意味着JavaScript的从未分配一个值mString。 我究竟做错了什么?

--------------解决方案-------------

这可能是不正确的,我会仔细检查,但它可能是由于基准丢失..

请尝试将ClsAccessor引用成员级别的..

public class JSExample extends Activity {
...
ClsAccessor _accessor = new ClsAccessor();
...
public void onCreate(Bundle savedInstanceState) {
...
mWebView.addJavascriptInterface(_accessor, "accessor");
...

此外,如果您通过线调试行不setValue()曾经被调用托管代码?

对于什么是值得的,我有我已经在上面描述和脚本来管理接口能正常工作是做的代码,但是我并不目前测试的位置,看看有没有向全班也适用的参考。

尝试启用您的WebView的JavaScript:

mWebview.getSettings().setJavaScriptEnabled(true);

我通过利用onLoadResource在我的网页视图类做到这一点。

Html页面:

<html>
<head>
function Submit(){

var username = $('#username').val();
var urlNew = 'processing.php';
urlNew = urlNew + '?' + 'username=' + username;
$('#submit').attr('href', urlNew);

return true;
}
</head>
<body>
<form>
<input id="username" name="username" type="text" />
<a href="" id="submit" onclick="return Submit();" ><img src="images/button.png" /></a>
</form>
</body>
</html>

于是在我的onLoadResource我侦听网址:

public void onLoadResource(WebView view, String url)
{
if(url.contains("http://domain.com/processing.php")){

//process the url and suck out the data

}

这可能不是你所需要的,但也有原因,我不得不这样做这样如此想通它可以帮助你。 另外请注意,我没有做表单提交,我做了<a>提交,那是因为onLoadResource不会拿起表格提交。

编辑:这可能会有帮助。

分类:JavaScript的 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 3.749 (s). 10 q(s)