如何禁用使用 copy/paste/etc 打开 Android 顶部菜单栏的 long-click。 Cordova Crosswalk 应用程序中的按钮?

How to disable long-click which opens the Android top menu bar with copy/paste/etc. buttons in Cordova Crosswalk apps?

正如标题所说,我有一个 Cordova 应用程序,它安装了 Cordova Crosswalk 插件并在 Android 和 iOS 上运行。

特别是在 Android 上,至少在 Android 5.1.1 和 4.4.4 版本上(由于 Crosswalk 而可能在所有版本上),每当我 long-press一个输入字段,我的 WebView 缩小了高度并显示了一个带有 cut/copy/paste/clipboard 按钮的 weirdly-styled 顶部栏,以及一个关闭顶部栏的 "back" 按钮:

如何防止这种情况发生 long-click?我已经尝试在我的应用程序 MainActivity.java 的 WebView 上添加一个 onLongClickListener 并调用 setLongClickable(false),如下所示:

public class MainActivity extends CordovaActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        loadUrl(launchUrl);

        // disable the context menu and all long clicks
        super.getView().setOnLongClickListener(new View.OnLongClickListener() {
            public boolean onLongClick(View v) {
            return true;
            }
        });
        super.appView.getView().setLongClickable(false);
        Log.i(TAG, "setLongClickable false");
    }
}

好像没什么效果。我还添加了以下 CSS 规则:

* {
    -webkit-text-size-adjust: none !important;
    -webkit-touch-callout: none !important;
    -webkit-user-select: none !important;
    user-select: none !important;
  }

这也没有效果。

我还尝试了以下 Java 脚本,该脚本在呈现任何视图之前运行(使用 Backbone/Marionette/Handlebars)(#viewport 是 [=55= 中的第一个 div 元素]):

  function stopEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
  }

  window.oncontextmenu = function (e) {
    return stopEvent(e);
  };

  window.onselectstart = function(e) {
    return stopEvent(e);
  };
  window.ondragstart = function(e) {
    return stopEvent(e);
  };

  $('#viewport').on('taphold', function(e) {
    console.log("taphold");
    e.preventDefault();
    e.stopPropagation();

    return false;
  });

同样,没有效果。

我几乎可以肯定这是由于 Cordova Crosswalk WebView 造成的,因为在删除插件后,行为消失了:long-press 上没有任何反应。 Crosswalk WebView 是否可能忽略了 setLongClickable / setOnLongClickListener 方法调用?也许我需要在另一个 "hidden" WebView 上调用这些方法?

如何禁用顶部栏?我不介意编辑 Cordova 或 Crosswalk Java 来源。谢谢。

编辑:也许这是相关的? https://crosswalk-project.org/jira/browse/XWALK-4786

看起来这是 Crosswalk 中的一个错误,并且已经提交了修复它的 PR:

https://github.com/crosswalk-project/crosswalk/pull/3193

在大多数情况下要停止文本复制栏,您必须设置视图的属性:

focusable = false
clickable = false

除非您需要单击视图才能执行某些操作。