Android:在WebView中检测history.back()

时间:2011-08-25 12:54:35

标签: javascript android webkit webview

WebView中的按钮用于使用history.back() JavaScript调用返回。我对JavaScript并不了解,但经过一些搜索后,我发现我们可以使用addJavascriptInterface()的{​​{1}}方法。

现在,我打算在单击按钮时完成我的活动。我得到了类似的东西:

WebView

但不幸的是,当按下按钮时,活动没有完成,我也没有在日志中获得任何内容。

这是按钮的html:

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不适合我的事实。我对html代码没有权力:)。我必须在应用程序中处理它。


修改:尝试将<a href="javascript:void(0);"> <img src="images/btn-go-back.png" onClick="history.back();" border="0" /> </a> 更改为history.back()(本地),仍然没有变化。


修改:我正在通过本地加载html conent进行实验,并发现如果我将window.history.back()更改为history.back()之类的内容并注册我的android_app.back()名称JavaScriptInterface它工作正常。这是为什么?这是否意味着我们不能使用android_app来注册接口?开发人员是否会提到这个?

4 个答案:

答案 0 :(得分:3)

阅读本文的导航网页历史记录部分。 它完全讲述了android webviews.It讲述了如何使webview处理历史记录。

http://developer.android.com/guide/webapps/webview.html

希望这有帮助。

答案 1 :(得分:1)

尝试 <a href="#" onclick="window.history.back()"><img src="bla" /></a>

编辑:只是看了你无法改变HTML代码..那么看不到解决方案..

答案 2 :(得分:1)

经过大量搜索和询问后,我终于得出结论:无法使用addJavascriptInterface (Object obj, String interfaceName)添加java脚本界面,界面名称为history (或者任何javascript关键字)。

也许这是在开发人员文档或手册中的某处写的,但我找不到它。

答案 3 :(得分:0)

检查一下:

@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);
    }