【问题标题】:ZeroClipboard JavaScript library throws Uncaught Error: Error calling method on NPObjectZeroClipboard JavaScript 库抛出未捕获的错误:在 NPObject 上调用方法时出错
【发布时间】:2013-05-23 07:52:46
【问题描述】:

我正在尝试使用https://github.com/zeroclipboard/ZeroClipboard 将内容复制到剪贴板。这似乎是一个不错的库,但是当复制按钮(闪光灯)悬停时,我收到错误 'Error calling method on NPObject.'

似乎是 Flash 安全问题,但我能够加载 Flash 内容。

有什么想法吗?

【问题讨论】:

    标签: flash zeroclipboard


    【解决方案1】:

    在 1.1.7 之后的版本中,如果您将“ZeroClipboard.swf”托管在与托管页面不同的域上,则需要将“allowScriptAccess”设置为“always”而不是“sameDomain”,“trustedDomains”也应包含当前页面域。

    ZeroClipboard.setDefaults( { moviePath:'http://YOURSERVER/path/ZeroClipboard.swf',allowScriptAccess: "always",trustedDomains: location.hostname } );
    

    【讨论】:

    • 错字:主机名应该是主机名。哦,谢谢,这对我有用。
    • 注意使用trustedDomains 而不是trustedOrigins。即使trustedDomains 应该被弃用,我还是必须使用它才能让我的设置正常工作(在http://localhost:3000 本地开发并从"//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.1.7/ZeroClipboard.swf" 加载.swf
    • 感谢您提供更多信息。忘了改变那行;)
    【解决方案2】:

    我搞定了。这是一个同源安全模型后膛。 我的网络应用程序子域是“WWW”,但 Flash 内容是从“CDN”提供的。 刚刚渲染了来自同一个子域的两个内容。

    了解更多@https://developer.mozilla.org/en-US/docs/Gecko_Plugin_API_Reference/Scripting_plugins?redirectlocale=en-US&redirectslug=Gecko_Plugin_API_Reference%3AScripting_plugins#NPObject

    谢谢。

    【讨论】:

      【解决方案3】:

      请加"trustedDomains : [*]"

      这就是我解决问题的方法。

      var clip = new ZeroClipboard(document.getElementById("copy-button"), {
          trustedDomains: [ "*" ],
          moviePath: "http://assets.dev.alipay.net/gallery/zeroclipboard/1.2.2/ZeroClipboard.swf"
      });
      

      更多详情:https://github.com/zeroclipboard/zeroclipboard/issues/103

      【讨论】:

        【解决方案4】:

        我昨天刚刚从 1.0.7 更新到 1.1.7,我遇到了同样的问题......我想知道他们是否因为昨天所做的提交而破坏了某些东西,因为这是我见过的唯一帖子关于这个问题。

        ~赛斯

        【讨论】:

          【解决方案5】:

          如果这对其他人有帮助,我设法让我的设置消除了这个错误(在 http://localhost:3000 本地开发并从 cdnjs.CoffeeScript 加载 Flash 文件:

          if ZeroClipboard?
              ZeroClipboard.setDefaults
                  moviePath: "//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.1.7/ZeroClipboard.swf"
                  trustedOrigins: [window.location.protocol + "//" + window.location.host]
                  trustedDomains: window.location.hostname
                  allowScriptAccess: "always"
          

          注意trustedDomains 是这里的关键。尽管据说它在 1.1.7 中已被弃用,但删除它(至少对我而言)会导致可怕的 Error calling method on NPObject 错误返回。

          【讨论】:

            【解决方案6】:

            否则您的域不是 ssl 安全的,即您的协议是 http 而不是 https,因此您应该从

            更改您的 swf 链接

            https://davidwalsh.name/demo/ZeroClipboard.swf

            http://davidwalsh.name/demo/ZeroClipboard.swf

            更多详情请查看以下文档中的Cross-Protocol Limitations主题

            http://www.kellyjandrews.com/zc/guides/limitations/protocol/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-01-25
              • 1970-01-01
              • 1970-01-01
              • 2010-11-27
              • 1970-01-01
              • 2011-12-30
              相关资源
              最近更新 更多