我已尝试过所有内容但仍然无效,请帮助:
我在这里设置我的WebView:
public class MainActivity extends ActionBarActivity {
private WebView mWebView;
private MyWebViewClient mWebViewClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
mWebViewClient = new MyWebViewClient(context);
mWebView = (WebView) findViewById(R.id.activity_main_webview);
mWebView.addJavascriptInterface(mWebViewClient, "Android");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDomStorageEnabled(true);
mWebView.setWebViewClient(mWebViewClient);
mWebView.loadUrl("file:///android_asset/index.html");
}
}
这是我从JS调用我的函数的地方:
<script>
$("#logInButton").click(function(){
if(isAndroid){
Android.onJavaLogIn();
}
return false;
});
</script>
<input type="button" value="Log In" id="logInButton" />
以下是我的处理方式:
public class MyWebViewClient extends android.webkit.WebViewClient {
private MainActivity context;
public MyWebViewClient(MainActivity context) {
this.context = context;
}
@JavascriptInterface
public void onJavaLogIn(){
context.onMainLogIn();
}
}
public class MainActivity extends ActionBarActivity {
public void onMainLogIn(){
mWebView.loadUrl("javascript:onJSLogIn();");
}
}
这是它要调用的JS函数:
<script>
function onJSLogIn(){
$("#logInButton").hide();
$("#logOutButton").show();
}
</script>
整个链似乎是正确的,我通过调试验证MainActivity中的onMainLogIn()是否被调用,但JS函数onJSLogIn()永远不会被调用,为什么?
答案 0 :(得分:1)
事实证明,WebView仅适用于主UI线程。所以我不得不像这样扭曲调用函数:
public void onMainLogIn(){
this.runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:onJSLogIn();");
}
});
}
答案 1 :(得分:0)
是的,这里一切都很好。由于我们无法调试它,我们只能提出一些建议。
1.首先在onJSLogIn JS方法中写一个警报,以确保函数不被调用。因为logInButton,logOutButton dom元素可能没有已装入。
2.将您的webview连接到远程调试,并使用chrome ADB工具检查错误。