Webview没有抓住javascript触摸事件

时间:2014-06-06 15:10:25

标签: javascript android webview

我有一个加载网址的网页视图。当网址加载时,应该对touchstart,touchmove和touchend等触摸事件做出反应。如果我在网络浏览器上尝试设备警报会被触发,但如果我在webview中打开它,则没有任何反应。我错过了什么吗?

这是我的代码:

webview.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutBoard"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/wvBoard"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:clickable="false"
        android:scrollbars="none" />

</RelativeLayout>

活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.webview);

    myWebView = (WebView) findViewById(R.id.wvBoard);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl(my_url);
    myWebView.getSettings().setLoadWithOverviewMode(true);
    myWebView.getSettings().setUseWideViewPort(false);
    myWebView.setHorizontalScrollBarEnabled(false);
    myWebView.setVerticalScrollBarEnabled(false);
    myWebView.getSettings().setLayoutAlgorithm(
        LayoutAlgorithm.SINGLE_COLUMN);

    myWebView.setInitialScale(170);
}
服务器端的

javascript:

$(document).ready(function () {
    ...

    canvas.addEventListener('touchstart', ev_canvas, false);
    canvas.addEventListener('touchmove', ev_canvas, false);
    canvas.addEventListener('touchend', ev_canvas, false);
}

function ev_canvas(ev) {
    this.touchstart = function (ev) {
        alert("called" + ev._x);
    };   
}      

修改 我尝试添加:

webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    return super.onJsAlert(view, url, message, result);
    }
});

但nothnig改变了。

EDIT2: 我注意到logcat中有一行sais:nativeOnDraw失败;清除背景颜色。 似乎此错误仅出现在Android 4.4上(这也是我的情况),但此链接中的解决方案:WebView Rendering Issue in Android KitKat没有帮助。

3 个答案:

答案 0 :(得分:0)

触摸事件不一定是个问题。警报可能无法正常工作。尝试使用此JavaScript alert not working in Android WebView stackoverflow问题

中建议的WebChromeClient

答案 1 :(得分:0)

这是在最后一次webview被警告破坏时发生的。因此,当下次打开Web视图时,会打开两个webview实例。因此,当webview被破坏时,我们应该清除一个webview实例。

@Override
    public void onDestroy() {
        super.onDestroy();
        webView.loadUrl("about:blank");
}

这是固定的。

答案 2 :(得分:0)

在被挫败了一段时间后,我关闭了我的Android应用程序,然后重新打开它,一切正常。我不确定是什么导致事情停止工作,但是'开启 - 关闭 - 开启为我做了诀窍。