【问题标题】:ZeroClipboard just isn't workingZeroClipboard 无法正常工作
【发布时间】:2012-10-16 20:59:39
【问题描述】:

最初,这篇文章是关于我尝试将 ZeroClipboard 注入网页并供我的 Chrome 扩展程序使用的,但我已经把这个场景一再简化,似乎是徒劳地试图找出问题,我 仍然无法让它工作。

我什至很难让 ZeroClipboard 自己的 GitHub 上的 the actual, documented "Minimal Example" 工作(诚然,我已将源代码修改为实际上是 HTML5 有效的,但确切的原件也不起作用)。即使是 @987654323 @,包含在 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 的文档/功能很糟糕。

【问题讨论】:

    标签: javascript google-chrome typeerror zeroclipboard referenceerror


    【解决方案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);
    }
    

    【讨论】:

    • 确保ZeroClipboard.js 文件没有损坏或部分加载,这会阻止创建ZeroClipboard 对象。检查Uncaught ReferenceError: ZeroClipboard is not defined之前的错误。
    • 不。 ZeroClipboard.js 已满载。
    【解决方案2】:

    我刚刚发现的:

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

    我用the example from GitHub后成功了。

    结论:

    要么使用示例 从 Google 代码下载,要么(我更喜欢)示例 从 GitHub 下载。

    【讨论】:

      【解决方案3】:

      对我来说,问题是变量模块已经由我使用的框架定义,而不是像 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;
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2013-09-09
            • 2016-12-01
            • 1970-01-01
            • 2016-09-01
            • 2012-07-11
            • 2018-04-08
            • 2017-04-20
            • 2018-10-02
            • 2016-09-04
            相关资源
            最近更新 更多