【问题标题】:Webview not catching javascript touch eventsWebview 没有捕捉到 javascript 触摸事件
【发布时间】:2014-07-27 22:05:19
【问题描述】:

我有一个加载 url 的 web 视图。当 url 加载时,应该对 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);
    }
});

但没有任何改变。

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

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    触摸事件不一定是问题。可能是警报不起作用。尝试按照JavaScript alert not working in Android WebView stackoverflow question 中的建议使用 WebChromeClient

    【讨论】:

    • 你用的是什么版本的安卓?相同的页面是否可以在设备浏览器上运行?
    • Android 是 4.4,正如我提到的,它可以在设备浏览器上运行。
    【解决方案2】:

    这发生在最后一次 webview 被警报破坏时。因此,当下次打开 web 视图时,会打开两个 webview 实例。所以当 webview 被销毁时,我们应该清除一个 webview 实例。

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

    这是我的固定。

    【讨论】:

      【解决方案3】:

      在沮丧了一段时间后,我关闭了我的 Android 应用程序,然后重新打开它,一切正常。我不确定是什么导致事情停止工作,但 ole' turn-it-off-and-on 为我解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 2017-07-27
        • 2012-10-07
        • 1970-01-01
        相关资源
        最近更新 更多