2013-04-16 4 views
4

Я хочу отключить контекстное меню по умолчанию, которое появляется после выбора определенного текста в Safari iOS (веб-браузер). Это возможно?Отключить контекстное меню выбора в Safari iOS

context menu destroy

+0

ли вы имеете в виду в веб-браузере Safari или в UIWebView в приложении? – Daniel

+0

Веб-браузер, отредактированный вопрос – Samin

ответ

2

Это возможно, см this example. В принципе, важная часть, чтобы установить правильные CSS atributes:

body { -webkit-touch-callout: none !important; } 
a { -webkit-user-select: none !important; } 

Кроме того, здесь question, который решает подобную проблему

+1

Я видел это решение, но оно не отключает меню выбора текста, но только длинное нажатие меню, которое появляется, когда вы долго нажимаете ссылку :( – Samin

0

Согласно onclick blocks copy+paste on Mobile Safari?, если текст в элементе, который имеет OnClick события, контекстное меню не будет отображаться.

+0

На самом деле это даже не будет который может быть не таким, каким вы хотели. – rakslice

0

Единственный способ, которым я нашел, - удалить выделение и снова выбрать с помощью javascript. Посмотрите на мой код:

/* prevent ios edit-menu */ 
if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) { 
    !function(){ 
     var target = document.body; // the element where the edit menue should be disabled 

     var preventSelRecursion; 
     document.addEventListener('selectionchange', function(e){ 
      var S = getSelection(); 
      if (!S.rangeCount) return; 
      if (S.isCollapsed) return; 
      var r = S.getRangeAt(0); 
      if (!target.contains(r.commonAncestorContainer)) return; 
      if (preventSelRecursion) return; 
      iosSelMenuPrevent(); 
     }, false); 

     var iosSelMenuPrevent = debounce(function(){ 
      var S = getSelection(); 
      var r = S.getRangeAt(0); 
      preventSelRecursion = true; 
      S = getSelection(); 
      S.removeAllRanges(); 
      setTimeout(function(){ // make remove-add-selection removes the menu 
       S.addRange(r); 
       setTimeout(function(){ 
        preventSelRecursion = false; 
       }); 
      },4); 
     },800); // if no selectionchange during 800ms : remove the menu 

     /* helper-function */ 
     function debounce(fn, delay) { 
      var timer = null; 
      return function() { 
       var context = this, args = arguments; 
       clearTimeout(timer); 
       timer = setTimeout(function() { 
        fn.apply(context, args); 
       }, delay); 
      }; 
     } 
    }(); 
} 
+0

Я пробовал, но не работал. –

Смежные вопросы