Javascript Android阻止网络视图导航
我正在使用Android 5.0和WebView组件的最新更新。我尝试将远程网站(我无法修改此网站源代码)嵌入到WebView中 下面是我的代码Javascript Android阻止网络视图导航,javascript,android,webview,Javascript,Android,Webview,我正在使用Android 5.0和WebView组件的最新更新。我尝试将远程网站(我无法修改此网站源代码)嵌入到WebView中 下面是我的代码 webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.contains(URL_SERVLET)) { //Do n
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains(URL_SERVLET)) {
//Do nothing
Log.d("DEBUG", "load IMAGE");
//view.stopLoading();
} else {
Log.d("DEBUG", "load URL into WebView");
view.loadUrl(url);
}
return true;
}
// Called when all page resources loaded
public void onPageFinished(WebView view, String url) {
webView.setVisibility(View.VISIBLE);
splashscreenLayout.setVisibility(View.GONE);
}
});
在网站端,我得到一个按钮,可以在弹出窗口中打开另一个url(使用javascript)。当我通过Android Webview点击它时,这个新的URL将替换Webview中的当前URL。我只想当我点击这个按钮时什么也没发生
它使用以下代码:未加载此url。但是网络视图变成了白色,就像一个空白屏幕
我试图调用stopLoading(),但没有成功
我不能调用webview.reload(),因为远程网站是用jsp编写的,其中有一个url提供(我想是动态生成)html页面。如果调用reload(),WebView将重新初始化为第一页(登录页)
我还试图保存webview状态并将其还原,但它不起作用
有没有一种方法可以“阻止”url的更改并保持webview指向第一个url而不重新加载?有一种有点黑客的方法可以做到这一点,那就是编写一些javascript来阻止页面导航,并将其注入到webview中 javascript看起来像是发布的答案 注意:另一种不太具侵入性的方法可能是让javascript简单地禁用特定的按钮 然后,要将其注入到WebView中,您可以按照下面的示例进行操作
var location = window.document.location;
var preventNavigation = function () {
var originalHashValue = location.hash;
window.setTimeout(function () {
location.hash = 'preventNavigation' + ~~ (9999 * Math.random());
location.hash = originalHashValue;
}, 0);
};
window.addEventListener('beforeunload', preventNavigation, false);
window.addEventListener('unload', preventNavigation, false);
WebView myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
injectScriptFile(view, "js/script.js"); // see below ...
// test if the script was loaded
view.loadUrl("javascript:setTimeout(test(), 500)");
}
private void injectScriptFile(WevView view, String scriptFile) {
InputStream input;
try {
input = getAssets().open(scriptFile);
byte[] buffer = new byte[input.available()];
input.read(buffer);
input.close();
// String-ify the script byte-array using BASE64 encoding !!!
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
view.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var script = document.createElement('script');" +
"script.type = 'text/javascript';" +
// Tell the browser to BASE64-decode the string into your script !!!
"script.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(script)" +
"})()");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
myWebView.loadUrl("http://www.example.com");