javascript - Webview 未捕获 javascript 触摸事件

标签 javascript android webview

我有一个加载网址的网页 View 。当 url 加载时,应该对 touchstart、touchmove 和 touchend 等触摸事件使用react。如果我在设备上的网络浏览器上尝试它,则会触发警报,但如果我在 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>

Activity :

@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 中的一行内容是:nativeOnDraw failed;清除为背景颜色。 看来这个错误只出现在Android 4.4上(这也是我的情况),但解决方案在这个链接:WebView Rendering Issue in Android KitKat没有帮助。

最佳答案

当 webview 因警报而被破坏时,会发生这种情况。因此,当下次打开 Web View 时,会打开两个 Web View 实例。因此,当 webview 被销毁时,我们应该清除一个 webview 实例。

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

这是我的固定问题。

关于javascript - Webview 未捕获 javascript 触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085159/

相关文章:

javascript - 在 Div 上拖动时禁用 ng-Click

javascript - 无法从 Azure 存储查看 PDF 嵌入 URL

webview - React Native 自动高度 WebView 在 Android 上不起作用

javascript - 数字格式化函数 : What algorithm is used for rounding values ending in 5?

javascript - 如何离线托管素材图标?

java - 为什么 GetMethodID() 对不存在的方法不返回 NULL?

android - 添加API失败

android - ListView 的 DrawerLayout 背景

javascript - 如何使用 javascript 在 WebView 中操作本地文件中的 CSS

Android - 在应用程序中覆盖 getPackageName() 并获取组件回调。