【问题标题】:Disabling text selection in PhoneGap在 PhoneGap 中禁用文本选择
【发布时间】:2012-08-02 23:26:59
【问题描述】:

是否可以禁用文本选择以使 PhoneGap 应用更类似于普通的原生应用?

类似这样的:

document.onselectstart = function() {return false;}

或:

* { 
user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
}

或者很多其他的东西都不起作用。

【问题讨论】:

    标签: android cordova textselection


    【解决方案1】:

    把它放在html,而不是*,对我有用:

    html {
        -webkit-user-select: none;
    }
    

    【讨论】:

    • 这是我在 WP8 上运行所需的修复程序。在没有“html”的情况下在 iOS 和 Android 上运行良好
    【解决方案2】:

    我四处寻找帮助。这终于对我有用了。

    public class MainActivity extends DroidGap {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            super.loadUrl("file:///android_asset/www/index.html");
    
            super.appView.setOnLongClickListener(new View.OnLongClickListener() {
    
                public boolean onLongClick(View v) {
                    return true;
                }
            });
        }
    }
    

    setOnClickListener 具有魔力。确保在调用 super.loadUrl 之后放置它。

    当然,这将禁用整个应用程序的文本选择,但我可以接受,而且我目前没有任何其他方法可以解决它。

    我还不确定它的完整含义,但我确实使用了 JqueryMobile 事件“taphold”,它仍然可以正常工作。我相信这是通过处理对 appView(托管您的 HTML 应用程序)的长按并防止它冒泡来实现的。

    【讨论】:

    • 谢谢它的工作!不要忘记在 loadUrl 之后添加它,否则 appView 可能为空。
    • 对我来说,我必须再插入一行代码是:super.appView.setLongClickable(false);那么这个解决方案对我有用。
    • 你如何启用文本选择?我没有看到 WebView 允许文本选择和一些默认上下文菜单的默认行为...
    • 我在科尔多瓦得到了Cannot resolve method 'setOnLongClickListener' in 'CordovaWebView'
    【解决方案3】:

    这也可以。

    <body oncontextmenu="return false" ondragstart="return false" 
    onselectstart="return false">
    

    【讨论】:

    • 这是迄今为止最优雅的解决方案,适用于 Android 6 和 Cordova 6.5.0。
    【解决方案4】:

    除了 ThinkingStiff 提到的内容外,我还使用以下内容删除任何突出显示/复制和粘贴

    -webkit-touch-callout: none;
    -webkit-tap-highlight-color: rgba(0,0,0,0); 
    

    【讨论】:

    • 现在没有高亮,一键点击,但是如果我按住点,文本选择工具会打开。我怎样才能阻止它? ://
    【解决方案5】:

    添加并享受。也适用于 iOS。

    <style type="text/css">
    *:not(input,textarea) {
        -webkit-touch-callout: none;
        -webkit-user-select: none; /* Disable selection/Copy of UIWebView */
    }
    </style>
    

    【讨论】:

    • 小修正,规则的签名应该是:*:not(input):not(textarea)
    【解决方案6】:

    我使用了以下代码,它在 Android 和 iOS 设备以及模拟器/模拟器上运行良好:

     * {
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        }
    
       input, textarea {
        -webkit-user-select: auto !important;
        -khtml-user-select: auto !important;
        -moz-user-select: auto !important;
        -ms-user-select: auto !important;
        user-select: auto !important;
        }
    

    【讨论】:

      【解决方案7】:

      最近更新到 Android 4.4 kitkat,它解决了 Edittext 在点击(长按)时显示的问题。显然edittext没有出现在jquery mobile和android 4.4上的phonegap的taphold上。我正在使用自定义 aosp rom,因此尚未在官方版本上进行测试,但我猜测(并希望)它应该适用于任何 4.4 版本。它似乎也解决了我在下面发布的 onclick 的其他冲突。

      我发现旧方法适用于旧 ICS rom(可能存在问题)(仅在 4.0.4 自定义 rom 上测试)。
      通过添加滚动条

      示例:

      <div id="scroll">content</div> 
      
      <style>
      #scroll {
      
      height: 100%;
      width: 100%;
      }
      </style>
      

      它还禁止 EditText 在 phonegap 和 jquery mobile 上弹出点击(长按)。尚不确定这是否会导致任何冲突(似乎对正在整理的 onclick 有一些影响)但使用常规文本应该可以正常工作。--- Android 4.4 解决了问题,不再需要滚动。 (见文章顶部)

      【讨论】:

        【解决方案8】:

        对我来说这是最好的:

        -webkit-tap-highlight-color: rgba(0,0,0,0); 
        tap-highlight-color: rgba(0,0,0,0);
        

        我的案例发生在 pixi.js 上,

        plugins.interaction.autoPreventDefault = true;
        

        【讨论】:

          【解决方案9】:
          * {
              -webkit-touch-callout: none;
              -webkit-user-select: none; 
          }
          
          [contenteditable="true"] , input, textarea {
              -webkit-user-select: auto !important;
              -khtml-user-select: auto !important;
              -moz-user-select: auto !important;
              -ms-user-select: auto !important;
              -o-user-select: auto !important;
              user-select: auto !important;  
          }
          

          【讨论】:

          • 请在您的答案中添加解释,这可能对以后的其他人有所帮助。 How to Answer
          猜你喜欢
          • 2013-09-18
          • 2012-10-26
          • 2013-06-27
          • 2010-09-26
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 2010-12-11
          相关资源
          最近更新 更多