2012-08-04 6 views
0

zeroclipboard를 사용하여 사용자 스크립트 내에서 상당히 큰 목록의 각 행에 "복사"링크를 추가하고 있습니다. 이를 위해 this page에 나열된 것과 비슷한 메서드를 사용합니다.이 메서드는 사용자가 행 위에 마우스를 놓을 때 각 행의 ZeroClipboard.Client() 요소가 만들어집니다. 이것은 FireFox에서는 훌륭하게 작동하지만 Chrome에서는 그렇지 않습니다.ZeroClipboard 사용자 스크립트가 Firefox에서 작동하지만 firefox에서 작동합니다.

참고 사항 : ZeroClipboard.js 파일의 내용을 외부 파일에 포함하는 대신 사용자 스크립트 자체에 복사했습니다. 모든 CONSOLE.LOG이 블록에서

function main(){ 
    window.clipboard = { 
     load: function(){ 
      if(!clipboard.initialized){ 
       ZeroClipboard.setMoviePath("http://www.swfcabin.com/swf-files/1343927328.swf"); 
       clipboard.initialized=true; 
       console.log("Clipboard intialized"); 
      } 
     }, 
     add: function(element){ 
      clipboard.load(); 
      var clip = new ZeroClipboard.Client(); 
      console.log('Clipboard client loaded: ' + element.id); 

      clip.glue(element, element.parentNode); 
      console.log('Clipboard glued: ' + element.id); 

      clip.setText(element.getAttribute('link')); 
      console.log('Clipboard text set: ' + element.getAttribute('link')); 

      clip.addEventListener('complete',function(client,text) { 
       console.log('Clipboard copied: ' + text);//doesn't fire in chrome 
      }); 

      clip.addEventListener('load',function(client) { 
       console.log('Clipboard loaded: ' + element.getAttribute('link')); 
      }); 
     }   
    } 
    //other code in user script including injecting above markup 
    //as well as contents of ZeroClipboard.js 
    window.ZeroClipboard = { ... } 
} 

var script = document.createElement("script"); 
script.appendChild(document.createTextNode('('+main+')()')); 
(document.head || document.body || document.documentElement).appendChild(script); 

: 여기

클립 보드의 클라이언트 객체를 추가 코드 세그먼트의 각 요소 여기서
<span style="color:blue; text-decoration:underline; cursor:pointer" id="copy_'+id+'" class="CopyLink" link="'+url+'" onmouseover="clipboard.add(this)">Copy</span>

위한 복사 버튼을 생성하는 태그이다 FireFox에서 마우스를 놓고 복사 범위를 클릭하면 '완전한'청취자 화재를 제외하고 모두 크롬이 발생합니다. this page의 예를 사용하여 Chrome에서 ZeroClipboard가 작동하는지 확인할 수있었습니다. 플래시 개체가 올바른 위치의 페이지에 추가되고 있는지 확인할 수도 있지만 단순히 클릭에 응답하지 않습니다.

zeroclipboard 코드는 더 이상 site에 따라 유지 관리되지 않으므로 다른 사용자가 나를 도와 줄 수 있기를 바랍니다. 나는 mouseover에서 크롬에 내장 된 플래시 객체를 동적으로 추가하거나 Chrome에서 사용자 스크립트와 greasemonkey로 파이어 폭스를 비교하는 등의 문제가있을 것이라고 생각하고 있습니까? 어떤 도움을 주시면 대단히 감사하겠습니다. 감사합니다.

답변

1

나는 그 이유를 모르지만 크롬에서도이 문제를 다루고 있습니다. 두 개의 zeroclipboard 구현이 있는데 하나는 페이지로드시 표시되고 다른 하나는 사용자가 대화 상자를 열 때만 표시됩니다. 페이지로드시 표시되는 항목은 예상대로 작동했지만 다른 페이지는 표시되지 않았습니다. 문제를 "해결"하기 위해 zeroclipboard 링크를 렌더링하고 화면의 절대 위치 (-500px)를 설정 한 다음 대화 상자가 열리면 링크를 옮길 수있는 자바 스크립트를 추가해야했습니다. 이것은 추한 솔루션이지만 Chrome에서 작동하도록하는 유일한 방법이라고 생각합니다. 귀하의 사례는 귀하의 페이지에 동적 zeroclipboard가 많이 있기 때문에 특히 털이 있습니다. 반면에 나는 하나만 가지고 있었지만, 귀하에게는 이것이 효과가 없을 이유가 없다고 생각됩니다.

+0

답장을 보내 주시면 감사하겠습니다. 내가 볼 수있는 문제는 파이어 폭스에서 이것을 사용할 때, 주입 된 영화의 수가 200ish 이상이되면 플래시가 충돌한다는 것입니다. 나는 내가 그들을 추가하지 않고 제거하는 것이라면 이것이 사실이 될지 걱정된다. –

+0

내 솔루션은 하나의 ZC 객체를 만들고 주위를 움직입니다 (호버 이벤트는 플래시 객체의 위치를 ​​다시 지정합니다).하지만 이동하자마자 크롬이 그것을 잃고 clip.setText가 작동을 멈 춥니 다. (이동 전에 setText가 작동하기는하지만 이후에는 작동하지 않으며 어떤 범위에서 호출되었는지는 중요하지 않습니다.) - 갑자기 FF15와 유사한 문제가 발생했습니다. ( – RozzA

+0

흥미롭게도 나는 ZC 객체가 페이지/요소로드에서 동적으로 작성되었습니다. 작동하지만 플래시 충돌이 발생합니다. – RozzA

0
<!-- <script type="text/javascript" src="http://davidwalsh.name/demo/ZeroClipboard.js"></script> --> 
    function copyText(fieldName,buttonName){ 
     var fieldNameTemp =fieldName; 
     var buttonNameTemp =buttonName; 
     var val = ""; 
     try{ 
      val = navigator.userAgent.toLowerCase(); 
     }catch(e){} 
     var swfurl = "js/ZeroClipboard.swf"; 
     setTimeout(function() { 
      ZeroClipboard.setMoviePath(swfurl); 
      var clip = new ZeroClipboard.Client(); 
      clip.addEventListener('mousedown', function() { 
       clip.setText(document.getElementById(fieldNameTemp).value); 
      }); 
      clip.addEventListener('complete', function (client, text) { 
       try{ 
        if(val.indexOf("opera") > -1 || val.indexOf("msie") > -1 || val.indexOf("safari") > -1 || val.indexOf("chrome") > -1){ 
         alert('Your text has been copied'); 
        } 
       }catch(e){ 
        alert('Please alert not use on fireFox'); 
       } 
      }); 
      clip.glue(buttonNameTemp); 
     }, 2000); 
    } 
관련 문제