aam*_*iri 6 javascript android webview
所以我知道还有其他帖子解决了同样的问题,我想我已经跟着他们去了这封信但是唉也无济于事.我正在尝试学习如何让我的应用程序与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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的WebView加载的html文件,其中包含我想要运行的javascript:
<!DOCTYPE html>
<html>
<head>
<script language="javascript">
accessor.setValue('Hello!');
</script>
</head>
<body>
<h1>Testing</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这不起作用.当我使用"Log.d("YO!",mString)运行代码时;" 取消注释我得到一个空指针异常,这意味着javascript从未为mString赋值.我究竟做错了什么?
这可能不正确,我必须仔细检查,但这可能是由于参考丢失了。
尝试将您的ClsAccessor推荐人设为会员级别。
public class JSExample extends Activity {
...
ClsAccessor _accessor = new ClsAccessor();
...
public void onCreate(Bundle savedInstanceState) {
...
mWebView.addJavascriptInterface(_accessor, "accessor");
...
Run Code Online (Sandbox Code Playgroud)
另外,如果您逐行调试,是否会setValue()在托管代码中被调用?
就其价值而言,我的代码正在按照我上面的描述进行操作,并且托管接口的脚本工作正常,但是我目前无法测试并查看没有对该类的引用是否也可以工作。
| 归档时间: |
|
| 查看次数: |
11142 次 |
| 最近记录: |