使用JavaScript启用阻止文本选择

时间:2011-08-18 03:16:29

标签: javascript css

我最近遇到website that disabled text selection,阻止任何人轻易复制和粘贴文字。我有一个书签,禁止使用JavaScript阻止上下文菜单的类似尝试,我想知道是否可以做类似的文本选择。

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

在其他地方,使用disableSelection(document.body)调用该函数。

我的上下文菜单bookmarklet中的解决方案也可能是必要的:

javascript:void(document.onmousedown=null);
void(document.onclick=null);
void(document.oncontextmenu=null)

最后,我看到elsewhere on StackOverflow也可以使用CSS:

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;

有没有一种方法可以同时对抗所有这些并通过我的浏览器结束这种暴政?我如何为所有元素启用MozUserSelect / SelectStart并设置CSS属性?

7 个答案:

答案 0 :(得分:20)

在一个讨厌的网络应用程序中遇到同样的问题,我每天都要在工作中使用它。

尝试编写我自己的书签,它会覆盖 onselectstart 事件处理程序,但它不起作用,显然是因为必须修改的其他CSS规则。

然后我找到了解决问题的 Enable All Text Selection bookmarklet by Alan Hogan 。书签的唯一问题是它不处理帧/ iframe。

作为额外的好处,它还可以在阻止它的页面上启用鼠标右键单击事件。

创建书签(例如,将任意页面的URL左侧的图标拖到书签栏),右键单击并选择编辑,重命名为有意义的内容,然后插入以下内容URL字段中的代码:

javascript:(function(){function ats(){var styles='*,p,div{user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;}';jQuery('head').append(jQuery('<style />').html(styles));var allowNormal=function(){return true;};jQuery('*[onselectstart], *[ondragstart], *[oncontextmenu], #songLyricsDiv').unbind('contextmenu').unbind('selectstart').unbind('dragstart').unbind('mousedown').unbind('mouseup').unbind('click').attr('onselectstart',allowNormal).attr('oncontextmenu',allowNormal).attr('ondragstart',allowNormal);}function atswp(){if(window.jQuery){ats();}else{window.setTimeout(atswp,100);}}if(window.jQuery){ats();}else{var s=document.createElement('script');s.setAttribute('src','http://code.jquery.com/jquery-1.9.1.min.js');document.getElementsByTagName('body')[0].appendChild(s);atswp();}})();

它有局限性,因为它不能在嵌套框架内工作。


..顺便说一下,为了使bookmarklet代码可读,我在http://subsimple.com/bookmarklets/jsbuilder.htm使用了Bookmarkelt Builder - 只需粘贴缩小的bookmarklet文本并单击Format按钮;这个工具为我节省了很多时间。

答案 1 :(得分:6)

与网站有同样的问题。

CSS无法解决此问题,因为只要您尝试,Javascript就会发挥作用 选择文字。

有两种方法可以解决这个问题 1)在您的Web浏览器上禁用Javascript。 看看这个以供参考。 http://browsers.about.com/od/googlechrome/ss/disable-javascript-chrome-windows.htm 2)打开javascript控制台。我正在使用chrome(在Mac上点击shift +命令+ C,在Ubuntu和Windows上点击f12)

复制此代码public class XXXXX { public static string execute(HttpRequest req){} } 并将其粘贴到控制台中,然后按Enter键。

答案 2 :(得分:3)

如果您使用的是谷歌浏览器,则可以使用此扩展名

https://chrome.google.com/webstore/detail/enable-selection/jehoagbopeaefibnihnfgenfcilmcikj/

它启用文本选择,如果被阻止,则单击鼠标右键

答案 3 :(得分:2)

同意jfriend00。避免那些问题网站是件好事。除非它真的必须存入网站...然后你可能会考虑尝试这个:

禁用问题网站的浏览器Java脚本也可能有效。 http://browsers.about.com/od/googlechrome/ss/disable-javascript-chrome-windows.htm

答案 4 :(得分:1)

网站总能找到令人讨厌的方法。他们所要做的就是将透明图像放在物体上或将图像放入图像中,然后你会慢下来。

放弃担心它。 Firefox 4+让您可以再次右键单击,因此应用程序无法将其从您身上夺走。如果您认为某个网站令人讨厌,那么请停止使用它并支持其他一些不那么令人讨厌的网站,或者停止尝试采取他们不希望您采取的措施。除非页面全部是从JS动态构建的,否则您始终可以从页面源获取文本。我说你应该停止使用惹恼你的网站。如果每个人都这样做,他们就必须改变他们的方式。

答案 5 :(得分:0)

在另一个网站上看到同样烦人的js和更多:

<script type="text/javascript" language="JavaScript">
function disableText(e){
  return false
}
function reEnable(){
  return true
}
//For browser IE4+
document.onselectstart = new Function ("return false")

//For browser NS6
if (window.sidebar){
  document.onmousdown = disableText
  document.onclick = reEnable
}
</script>
<script language="JavaScript1.2">
var msgpopup="";
function pmb(){
      if(alertVis == "1") alert(message);
          if(closeWin == "1") self.close();
          return false;
}
function IE() {
     if (event.button == "2" || event.button == "3"){pmb();}
}
function NS(e) {
     if (document.layers || (document.getElementById && !document.all)){
          if (e.which == "2" || e.which == "3"){ pmb();}
     }
}
document.onmousedown=IE;document.onmouseup=NS;document.oncontextmenu=new Function("alert(msgpopup);return false")

</script>
<script type="text/javascript">
function disableSelection(target){
if (typeof target.onselectstart!="undefined") //For IE
    target.onselectstart=function(){return false}
else if (typeof target.style.MozUserSelect!="undefined") //For Firefox
    target.style.MozUserSelect="none"
else //All other route (For Opera)
    target.onmousedown=function(){return false}
target.style.cursor = "default"
}

</script>

请注意,所有事件处理程序都手动附加到documentdisableSelection(document.body)。因此,@ alan-h引用的允许鼠标事件的脚本也需要更新以在document和document.body上运行。 (回复:el.onselectstart = el.ondragstart = el.ondrag = el.oncontextmenu = el.onmousedown = el.onmouseup = function(){return true};

答案 6 :(得分:0)

所以我尝试了以上所有答案,但没有一个对我有用。

稍后,我在Microsoft Edge browser中打开了相同的链接。

就成功了。当然,您必须在计算机上,并且应该安装Edge。 请先尝试以上答案。