2010-11-30 25 views
1

Firefoxでは、chromeとIEのテキストが選択可能ですが、これには何らかの方法がありますか?コードは別の質問から取られました(私は今見つけることができません)ので、古いかもしれませんか? WebKitの使用khtmlUserSelectの代わりMozUserSelectについてはChrome/IEでJavascript非選択のテキストが機能しない

disableSelection(document.getElementById("gBar")); 
+2

どうしますか?たとえそれが機能しても、テキストを再び選択可能にすることは、javasciptを無効にする、またはソースを見ることと同じくらい簡単です。本当に選択を妨げる唯一の方法は、代わりにあらゆる種類のアクセシビリティ問題を引き起こし、検索エンジンからのテキストを隠すことです。 – tdammers

+1

私は誰かがこの笑いを尋ねようとしていることを知っていた、私はこれらの落とし穴を完全に認識しているが、これはデータ保護のためではなく、単に私が作っているWebアプリケーションのパフォーマンスを向上させることである。その中に含まれているテキストが選択されず、アプリが不思議に動作するようになります。 –

+0

私は最近、そのような問題があり、jQueryのアップグレードでそれを解決しました:) – sje397

答えて

1

:として、コード内で使用

// Prevent selection 
function disableSelection(target) { 
    if (typeof target.onselectstart != "undefined") //IE route 
     target.onselectstart = function() { return false } 
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route 
     target.style.MozUserSelect = "none" 
    else //All other route (ie: Opera) 
     target.onmousedown = function() { return false } 
} 

/WebKitのをヤモリに関連する両方のスタイルは、あなたがそれを適用するために、クラスを使用することができ、CSSあるとして、あなたは

「オン」に選択不可・プロパティを設定して、オペラやMSIEで

<script type="text/javascript"> 
<!-- 
function disableSelection(target) 
{ 
    target.className='unselectable'; 
    target.setAttribute('unselectable','on'); 
} 
//--> 
</script> 
<style type="text/css"> 
<!-- 
.unselectable{ 
-moz-user-select:none; 
-khtml-user-select: none; 
} 
--> 
</style> 

注:選択不可能な子要素は渡されません。したがって、ターゲット内にtextNodes以外のものがある場合は、MSIE/opera用の回避策が必要です。

+0

ありがとう、ありがとう –

+0

いいえWebkitプレフィックスを使用するには – Dan

0

FirefoxのMozUserSelectスタイリングのように、Webkitベースのブラウザ(SafariやChromeなど)には-webkit-user-select: noneを使用できます。

私はOperaで-o-user-select: noneを使用できると思います。しかし、私はそれをテストしていません。あなたが追加することができますWekbit(たとえばChromeとSafariなど)のためにhttp://msdn.microsoft.com/en-us/library/ms534706(VS.85).aspx

+0

ありがとうコードですが、これは3つのすべてのブラウザ(FFで動作しますが、chrome/IEでは動作しません)のオリジナルコードとまったく同じです。 –

+0

残念ながら痛みはありません。 divが他の選択可能なdivに含まれているかどうかは、おそらく問題の一部ですか? –

+0

SafariとChromeで動作します。 しかし、Dr.Molleが書いたように、あなたはおそらくすべきです。だから、CSSクラスにスタイリングを入れ、ターゲットに設定します。 –

0

:IEの場合

else if (typeof target.style.webkitUserSelect != "undefined") // Webkit route 
    target.style.webkitUserSelect = "none"; 

を、 '選択不可' を使用:

IEの場合
// Prevent selection 
function disableSelection(target) { 
    if (typeof target.onselectstart != "undefined") //IE route 
     target.onselectstart = function() { return false } 
    else if (typeof target.style.userSelect != "undefined") //Some day in the future? 
     target.style.userSelect = "none" 
    else if (typeof target.style.webkitUserSelect != "undefined") //Webkit route 
     target.style.webkitUserSelect = "none" 
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route 
     target.style.MozUserSelect = "none" 
    else //All other route (ie: Opera) 
     target.onmousedown = function() { return false } 
} 

、多分これはあなたを助けることができる

else if (typeof target.unselectable != "undefined") // IE route 
    target.unselectable = true; 

参考:http://help.dottoro.com/ljrlukea.php

+0

まだ同じ動作 –

+0

@Tom Gullen:ここでテストされているだけで、Chrome用に動作します:http://jsfiddle.net/sje397/Hk3tu/ – sje397

1

上記のすべての例は、ブラウザのバージョンに基づいて複雑すぎます。 私はsimleソリューションを手に入れました...すべてのブラウザで動作します!

// you can select here which html element you allow to be selected 
var ExcludeElems = ["INPUT","SELECT","OPTION"] 



function disableSelection (target) { 
    // For all browswers code will work ..... 
    target.onmousedown = function (e) 
    { 
    var i; 
    var e = e ? e : window.event; 

    if (e) 
     for (i=0; i<ExcludeElems.length;i++) 
     if (e.target.nodeName == ExcludeElems[i]) 
      return true; 
    return false; 
    } 

あなたはこの機能をさらに複雑にすることができます必要がある場合。 任意のコンテナ要素にこのコードを使用してください...

disableSelection (document) 
//disableSelection (document.body) 
//disableSelection (divName) .... 
関連する問題