簡體   English   中英

Android:在WebView中檢測history.back()

[英]Android : Detect history.back() in WebView

我的WebView一個按鈕用於通過history.back() JavaScript調用返回。 我對JavaScript不太了解,但是經過一番搜索,我發現我們可以使用WebViewaddJavascriptInterface()方法。

現在,我打算在單擊按鈕時完成我的活動。 我着陸時遇到了這樣的事情:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM