ZeroClipboard无法正常工作

时间:2012-10-26 15:10:40

标签: javascript google-chrome typeerror zeroclipboard referenceerror

最初,这篇文章是关于我尝试将ZeroClipboard注入网页并由我的Chrome扩展程序使用,但是我已经愚弄了这个场景,看似徒劳无益的尝试来识别问题而且我仍然无法让它发挥作用。

我甚至难以在ZeroClipboard自己的GitHub上获得the actual, documented "Minimal Example“工作(诚然,我已经将源代码修改为实际上是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的文档/功能非常糟糕。

5 个答案:

答案 0 :(得分:2)

我刚发现的事情:

那不匹配。我有一个类似的错误,而不是这个问题的原始海报。

在我使用the example from GitHub后,我成功了。

结论:

使用Google代码中的示例下载或(我更喜欢),从GitHub下载示例

答案 1 :(得分:1)

您需要指定swf文件的路径:

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

答案 2 :(得分: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;

答案 3 :(得分:0)

试用2.2.1-dev版本:http://datatables.net/download/build/dataTables.tableTools.nightly.js?_=60133663e907c73303e914416ea258d8 我认为应该在那里解决。 我还要指出新的$ .fn.dataTable.TableTools(...)现在是首选形式。 TableTools全局仍在2.2.x中,但将在2.3 +中删除。

答案 4 :(得分:-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);
}