5

最初,这篇文章是关于我试图将ZeroClipboard注入到网页中并供我的Chrome扩展使用,但是我一直沉迷于这种情况,似乎是徒劳无益地尝试找出问题,我仍然不能得到它的工作。ZeroClipboard只是不工作

我甚至没法把the actual, documented "Minimal Example“关于ZeroClipboard自己的GitHub的工作(当然,我已经改装成源实际上是HTML5的有效的,但确切原也不能工作),即使test.html,这包括在tar.gz存档,不工作

“小例子”:代码

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title></title> 
    </head> 
    <body> 
     <input type="button" id="d_clip_button" data-clipboard-text="Copy Me!" value="Copy To Clipboard" /> 
     <script src="ZeroClipboard.js"></script> 
     <script> 
      var clip = new ZeroClipboard(document.getElementById('d_clip_button')); 
     </script> 
    </body> 
</html> 

“小例子”:控制台输出

Uncaught TypeError: object is not a function index.html:11 

信息

  • zeroclipboard-1.0.7.tar.gz archive的全部内容都在同一目录index.html
  • ZeroClipboard.js文件未损坏/不完整且正在正确加载。
  • 我使用Chrome v24.0.1312.52

 

要么我失去了一些东西真的,真的在这里明显或ZeroClipboard的文档/功能是糟糕透顶。

回答

-1

对于加载外部脚本,在页面主体中插入SCRIPT元素将而不是立即加载并执行脚本。 appendChild将立即返回,并且脚本将在之后加载当前脚本执行从所有函数返回并进入空闲状态。

对此,SCRIPT元素的onload属性可用于在外部脚本加载后执行代码。

function inject_zeroClipboard(){ 
    var path_Root_zeroClipboard = chrome.extension.getURL("plugins/zeroClipboard"); 
    var element_Head = document.getElementsByTagName('head')[0]; 
    var element_zeroClipboard = document.createElement("script"); 
    element_zeroClipboard.src = path_Root_zeroClipboard + "/ZeroClipboard.js"; 

    element_zeroClipboard.onload = function() { 
     ZeroClipboard.setMoviePath(path_Root_zeroClipboard + "/ZeroClipboard10.swf"); 
     var clip = new ZeroClipboard.Client(); 
     clip.glue("element_Example"); 
     clip.addEventListener("click", function(){ 
      clip.setText(data_Example); 
     }); 
    }; 

    element_Head.appendChild(element_zeroClipboard); 
} 
+0

不,似乎没有奏效。同样的错误。 :/ – mythofechelon

+0

确保'ZeroClipboard.js'文件没有损坏或部分加载,这防止了'ZeroClipboard'对象被创建。检查'Uncaught ReferenceError:ZeroClipboard未定义'之前的错误。 – Jay

+0

没有。 'ZeroClipboard.js'完全加载。 – mythofechelon

0

对我来说,问题在于变量模块已经由我使用的框架定义,而不是像ZeroClipboard那样使用。事实上,如果你看一下ZeroClipboard.js文件的末尾,这里是你可以看到:

if (typeof module !== "undefined") { 
    module.exports = ZeroClipboard; 
    } else if (typeof define === "function" && define.amd) { 
    define(function() { 
     return ZeroClipboard; 
    }); 
    } else { 
    window.ZeroClipboard = ZeroClipboard; 
    } 

我刚刚更换此通过下面的代码来解决这个问题:

window.ZeroClipboard = ZeroClipboard; 
1

你将需要指定SWF文件的路径:

var clip = new ZeroClipboard(document.getElementById('d_clip_button'),{moviePath: "/path/ZeroClipboard.swf"});