gpt4 book ai didi

javascript - Android-使用 addJavaScriptInterface 从 Javascript 返回一个值

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:08 26 4
gpt4 key购买 nike

所以我知道还有其他帖子解决了同样的问题,我想我已经严格按照他们的要求去做了,但遗憾的是无济于事。我正在尝试学习如何让我的应用程序与 javascript 交互。我只想能够从我的 javascript 返回一个值到我的 Activity 。
这是我的 Activity :

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;
}
}

这是我的 WebView 加载的 html 文件,其中包含我要运行的 javascript:

    <!DOCTYPE html>

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

这是行不通的。当我用 "Log.d("YO!, mString);"运行代码时未注释我得到一个空指针异常,这意味着 javascript 从未为 mString 赋值。我做错了什么?

最佳答案

这可能不正确,我将不得不仔细检查,但这可能是由于引用丢失..

尝试使您的 ClsAccessor 引用成员级别 one..

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

此外,如果您逐行调试,setValue() 是否会在托管代码中被调用?

对于它的值(value),我的代码正在按照我上面描述的方式执行,并且托管接口(interface)的脚本工作正常,但是我目前无法测试并查看是否也没有对该类的引用有效。

关于javascript - Android-使用 addJavaScriptInterface 从 Javascript 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com