[英]Android : Detect history.back() in WebView
我的WebView
一個按鈕用於通過history.back()
JavaScript調用返回。 我對JavaScript不太了解,但是經過一番搜索,我發現我們可以使用WebView
的addJavascriptInterface()
方法。
現在,我打算在單擊按鈕時完成我的活動。 我着陸時遇到了這樣的事情:
public class MyActivity extends Activity {
private static final String sTag = "MyActivity";
private WebView mWebContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browser_page);
mWebContent = (WebView) findViewById(R.id.webContent);
mWebContent.getSettings().setJavaScriptEnabled(true);
mWebContent.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mWebContent.getSettings().setBuiltInZoomControls(true);
mWebContent.addJavascriptInterface(new JavaScriptInterface(), "history"); //history.back();
Bundle extras = getIntent().getExtras();
if (extras != null) {
mWebContent.loadUrl(extras.getString("URL"));
}
}
public class JavaScriptInterface {
JavaScriptInterface() {
}
public void back() {
Log.v(sTag, "back pressed");
MyActivity.this.finish();
}
}
}
但是不幸的是,當按下按鈕時,“活動”未完成,“日志”中也沒有任何內容。
這是按鈕的html:
<a href="javascript:void(0);">
<img src="images/btn-go-back.png" onClick="history.back();" border="0" />
</a>
我究竟做錯了什么?
提前致謝。
編輯:只是想清除一個事實,更改html不是我的選擇。 我對html代碼無權:)。 我必須在應用程序中處理它。
編輯:嘗試將history.back()
更改為window.history.back()
(局部),仍然沒有更改。
編輯:我正在通過本地加載html conent進行實驗,發現如果我將history.back()
更改為類似於android_app.back()
的名稱,並以android_app
名稱注冊我的JavaScriptInterface
則效果很好。 這是為什么? 這是否意味着我們不能使用history
來注冊接口? 開發人員文檔是否提到了這一點?
閱讀本文的“ 瀏覽網頁歷史記錄”部分。 它完整地講述了android Webviews.It講述了如何使WebViews處理歷史記錄。
http://developer.android.com/guide/webapps/webview.html
希望這可以幫助。
嘗試<a href="#" onclick="window.history.back()"><img src="bla" /></a>
編輯:只是閱讀您不能更改HTML代碼..然后看不到解決方案。
經過大量搜索和詢問,我終於得出一個結論,即不能使用addJavascriptInterface (Object obj, String interfaceName)
(以接口名稱作為history
(或可能是任何javascript關鍵字))添加Java腳本接口。
也許這是寫在開發人員文檔或手冊中的某個地方,但是我找不到。
檢查一下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
myWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.