在我的Android网络应用中,我尝试使用javascript(来自远程HTML文件)来控制Android WebView的可见性。
我试图使用addJavascriptInterface类但没有成功。 (见http://developer.android.com/guide/webapps/webview.html)
基本上我希望我的javascript成为以下
<script>
function this() {
Android.hideView('myWebViewID');
}
window.onload = this;
</script>
似乎很容易,但我的所有尝试都会导致我的应用在调试过程中崩溃。
我最近的尝试是这样的:
public class JavaScriptInterface {
Context mContext;
JavaScriptInterface(Context c) {
mContext = c;
}
public void hideView(View v) {
WebView webview_x = (WebView) v;
webview_x.setVisibility(View.GONE);
}
}
答案 0 :(得分:1)
问题是您在WebView对象中转换字符串“myWebViewID”。 我想这是不可能的。
要做你想做的事,你必须实现类似于将你在JS中使用的字符串转换为标识你的WebView的ID(int)的开关:
public class JavaScriptInterface {
private Activity mContext;
JavaScriptInterface(Activity c) {
mContext = c;
}
public void hideView(String v) {
int id = stringToId(v);
WebView webview_x = (WebView) mContext.findViewById(id);
webview_x.setVisibility(View.GONE);
}
private Integer stringToId(String str) {
if(str.equals("stringForId1") {
return R.id.webView1;
} else if(str.equals("stringForId2") {
return R.id.webView2;
} else if(...) {
....
} else {
return null;
}
}
}
答案 1 :(得分:1)
这是解决方案:
web视图:
mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebChromeClient(new CustomWebChromeClient());
mWebView.addJavascriptInterface(new CustomJavaScriptInterface(),
"android");
mWebView.loadUrl("file:///android_asset/www/test.html");
CustomeJavascriptInterface:
final class CustomJavaScriptInterface {
public void hide() {
mHandler.post(new Runnable() {
public void run() {
mWebView.setVisibility(View.INVISIBLE);
}
});
}
}
HTML:
<div onclick="window.android.hide()">Click!</div>
你应该没事!
请注意,如果没有处理程序,您将无法访问webview并更改其可见性!
希望这有帮助!