正如标题所说,我有一个Cordova应用程序,它安装了Cordova Crosswalk插件并在Android和iOS上运行。
特别是在Android上,至少在Android 5.1.1和4.4.4版本上(并且很可能是由于Crosswalk),每当我长按输入字段时,我的WebView会缩小高度并显示带有剪切/复制/粘贴/剪贴板按钮的奇怪风格的顶栏,以及关闭顶栏的“后退”按钮:
如何防止此长按?我尝试在我的应用程序的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;
}
这也没有效果。
我还尝试了以下Javascript,它在任何视图渲染之前运行(使用Backbone / Marionette / Handlebars)(#viewport是体内第一个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,因为删除插件后,行为消失了:长按没有任何反应。 Crosswalk WebView可能忽略了setLongClickable / setOnLongClickListener方法调用吗?也许我还需要另外一个“隐藏”的WebView来调用这些方法吗?
如何禁用顶栏?我不介意编辑Cordova或Crosswalk Java源代码。感谢。
编辑:也许这是相关的? https://crosswalk-project.org/jira/browse/XWALK-4786
答案 0 :(得分:0)
看起来这是Crosswalk中的一个错误,修复它的PR已经提交:
答案 1 :(得分:0)
在大多数场景中,要停止文本复制栏,您必须设置视图的属性:
focusable = false
clickable = false
除非您需要点击视图以执行某些操作。