5

最初,这篇文章是关于我尝试通过 Chrome 扩展程序将 ZeroClipboard 注入网页并供我的 Chrome 扩展程序使用的,但我已经把这个场景变笨了,似乎是徒劳的试图找出问题,但我仍然不能让它工作。

我什至很难在 ZeroClipboard 自己的 GitHub 上获得实际的、记录在案的“最小示例”(诚然,我已将源代码修改为实际上是 HTML5 有效的,但确切的原件也不起作用)。Even 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存档的全部内容与index.html.
  • ZeroClipboard.js文件没有损坏/不完整,并且正在正确加载。
  • 我正在使用 Chrome v24.0.1312.52

 

要么我在这里遗漏了一些非常非常明显的东西,要么 ZeroClipboard 的文档/功能非常糟糕。

4

5 回答 5

2

我刚刚发现的:

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

在我使用来自 GitHub 的示例后,我成功了。

结论:

要么使用示例从 Google Code 下载,要么(我更喜欢)同时使用示例从 GitHub 下载。

于 2013-01-24T15:12:29.733 回答
1

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

 var clip = new ZeroClipboard( document.getElementById('d_clip_button'),{moviePath: "/path/ZeroClipboard.swf"} );
于 2013-04-10T12:28:07.803 回答
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;
于 2013-02-21T10:34:19.853 回答
0

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

于 2015-07-02T12:12:22.463 回答
-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);
}
于 2012-10-26T18:24:09.187 回答