我在Android工作,我是这个开发人员的新手。
我学习并开始使用Eclipse IDE开发我的应用程序。
我正在显示带有URL的webView,然后我尝试调用JS函数。此函数返回一个字符串值。
我能够在警报中显示它,但我希望将其作为字符串值。我们怎么做到这一点?
我在转换为字符串的行上遇到类型不匹配错误。
function fing() {
return "welcome today"
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
webView = (WebView) findViewById(R.id.webView1);
generate = (Button) findViewById(R.id.generate);
go = (Button) findViewById(R.id.go);
webView.setVisibility(View.GONE);
generate.setVisibility(View.GONE);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
Log.d("LogTag from js call method", message);
result.confirm();
return true;
}
});
go.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.getSettings().setJavaScriptEnabled(true);
go.setVisibility(View.GONE);
webView.setVisibility(View.VISIBLE);
generate.setVisibility(View.VISIBLE);
webView.loadUrl("myUrl");
}
});
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl("javascript:alert(fing())");
String retStr = webView.loadUrl("javascript:alert(fing())");//Here type mis match error
System.out.println(retStr)
}
});
答案 0 :(得分:0)
基本上你通过使用javascript bridge在webview javascript环境到java android之间交换字符串值。请看示例
http://developer.android.com/guide/webapps/webview.html
如果你不能使用上面的javascript桥
试试
javascript - >
function fing() {
return "welcome today"
}
Webview加载脚本javascript:alert(fing().stringyfy())"
答案 1 :(得分:0)
你不应该以你在上面尝试过的方式做到这一点。
为了使JS调用从该函数返回一个值,将generate.setOnClickListener代码更改为如下所示,
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl("javascript:alert(fing())");
}
});
然后,您还应该更改以下部分以将该返回值分配给String,
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
Log.d("LogTag from js call method", message);
str = message;
result.confirm();
return true;
}
});
这应该已经在你的Logcat控制台中,因为你的代码已经有了。
如果没有,您需要仔细检查webChromeClient,如果它在同一webView对象的Activity中的某个位置再次启动。
您必须在Activity中创建str(String)变量,该变量在onJSAlert方法中指定。
希望这会有所帮助。