【发布时间】:2015-08-11 18:31:39
【问题描述】:
正如标题所说,我有一个 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
【问题讨论】:
标签: javascript android cordova crosswalk-runtime