【发布时间】:2013-05-23 07:52:46
【问题描述】:
我正在尝试使用https://github.com/zeroclipboard/ZeroClipboard 将内容复制到剪贴板。这似乎是一个不错的库,但是当复制按钮(闪光灯)悬停时,我收到错误 'Error calling method on NPObject.'。
似乎是 Flash 安全问题,但我能够加载 Flash 内容。
有什么想法吗?
【问题讨论】:
标签: flash zeroclipboard
我正在尝试使用https://github.com/zeroclipboard/ZeroClipboard 将内容复制到剪贴板。这似乎是一个不错的库,但是当复制按钮(闪光灯)悬停时,我收到错误 'Error calling method on NPObject.'。
似乎是 Flash 安全问题,但我能够加载 Flash 内容。
有什么想法吗?
【问题讨论】:
标签: flash zeroclipboard
在 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
我搞定了。这是一个同源安全模型后膛。 我的网络应用程序子域是“WWW”,但 Flash 内容是从“CDN”提供的。 刚刚渲染了来自同一个子域的两个内容。
谢谢。
【讨论】:
请加"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
【讨论】:
我昨天刚刚从 1.0.7 更新到 1.1.7,我遇到了同样的问题......我想知道他们是否因为昨天所做的提交而破坏了某些东西,因为这是我见过的唯一帖子关于这个问题。
~赛斯
【讨论】:
如果这对其他人有帮助,我设法让我的设置消除了这个错误(在 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 错误返回。
【讨论】:
否则您的域不是 ssl 安全的,即您的协议是 http 而不是 https,因此您应该从
到
更多详情请查看以下文档中的Cross-Protocol Limitations主题
http://www.kellyjandrews.com/zc/guides/limitations/protocol/
【讨论】: