http://language-and-engineering.hatenablog.jp/entry/20150716/UnlockCopyPasteForbiddenOnWebPage
上のURLで紹介されたいたコピー禁止の解除方法。まあどうしてもほしければソース開けばいいという話ではある。
ちなみに「elem[ "on" + evs[i] ] = f;」の箇所は元ページでは間違って「 = f();」になっていた。
やりたいことは元のイベントハンドラを無意味なもので上書きしちゃいたいだけなので、「elem[ "on" + evs[i] ] = undefined;」でも別にいいと思う。(firefoxではそれで動いた)
// 入れ替えるイベントリスナ var f = function(){ return true; }; // 書き換え対象のDOMイベント名 var evs = "beforecopy beforecut click contextmenu copy dragstart mousedown mouseup selectstart".split(" "); // 書き換え対象のCSS属性名 var props = "userSelect MozUserSelect MsUserSelect WebkitUserSelect".split(" "); // 1要素に対する書き換え操作 function replace_events( elem ){ // イベント for( var i = 0; i < evs.length; i ++ ){ elem[ "on" + evs[i] ] = f; } // CSS属性 if(elem.style){ for( var i = 0; i < props.length; i ++ ){ elem.style[ props[i] ] = ""; } } } // 全要素に対し var elems = document.getElementsByTagName("*"); for(var i = 0; i < elems.length; i ++){ replace_events( elems[i] ); } replace_events( document );
ちょちょい短く修正しながらブックマークレット化。
javascript:evs="beforecopy,beforecut,click,contextmenu,copy,dragstart,mousedown,mouseup,selectstart".split(",");props="userSelect,MozUserSelect,MsUserSelect,WebkitUserSelect".split(",");r=(elem)=>{for(ev%20of%20evs){elem["on"+ev]="";}if(elem.style){for(p%20of%20props){elem.style[p]=""}}};for(e%20of%20document.getElementsByTagName("*")){r(e);}r(document);alert("ok");