如何禁用使用 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:
在大多数情况下要停止文本复制栏,您必须设置视图的属性:
focusable = false
clickable = false
除非您需要单击视图才能执行某些操作。
正如标题所说,我有一个 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:
在大多数情况下要停止文本复制栏,您必须设置视图的属性:
focusable = false
clickable = false
除非您需要单击视图才能执行某些操作。