ZeroClipboard SWF无法加载

时间:2010-09-18 12:29:25

标签: javascript jquery flash clipboard zeroclipboard

ZeroClipboard.setMoviePath( "/zeroclipboard/ZeroClipboard.swf" );
var clip = new ZeroClipboard.Client();
clip.setText( $('textarea#download_me').text() );
clip.glue( 'clip' );

我正在使用流行的ZeroClipboard插件将内容复制到用户的剪贴板。它在开发环境以及domain1.com上完美运行,但在domain2.com上没有完全相同的文件和设置!

/zeroclipboard/ZeroClipboard.js加载。

/zeroclipboard/ZeroClipboard.swf无法加载!

我尝试了一切,但无法让它发挥作用。我真的很困惑为什么它在domain1上工作但在domain2上没有?

我该如何解决这个问题?

非常感谢你的帮助!

6 个答案:

答案 0 :(得分:2)

如果此文件与您的网页位于同一目录中,则它将开箱即用。但是,如果SWF文件托管在其他位置,则需要像这样设置URL(将此代码放在脚本标记之后):

    ZeroClipboard.setMoviePath( 'http://YOURSERVER/path/ZeroClipboard.swf' );

要使用Zero Clipboard 1.0.7中提供的新Rich HTML功能,必须将影片路径设置为新的“ZeroClipboard10.swf”文件,该文件包含在1.0.7存档中。例如:

    ZeroClipboard.setMoviePath( 'ZeroClipboard10.swf' );

或者,在当前目录以外的自定义位置:

    ZeroClipboard.setMoviePath( 'http://YOURSERVER/path/ZeroClipboard10.swf' );

答案 1 :(得分:2)

http://kenneth.kufluk.com/blog/2008/08/cross-domain-javascript-to-flash/可能有所帮助。另外要注意子域名,Flash可能会感到困惑。还可以使用Flash调试播放器和Fiddler(或类似的)来查看发生了什么。

答案 2 :(得分:2)

跨域资产有多种选择:

// SWF inbound scripting policy: page domains that the SWF should trust. (single string or array of strings)
  trustedDomains: [window.location.host],

请参阅: https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md

另外:如果在config中将debug设置为true,则当前主分支(2.x)将跨域记录到控制台。

我使用cdn托管版本的swf文件取得了一些成功。但经过一些编辑后,这神秘地停止在本地工作,但确实在我的临时服务器上工作。

这是我的配置:

  ZeroClipboard.config({
    moviePath: '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.2/ZeroClipboard.swf',
    forceHandCursor: true,
    debug: true
  });

另见jsfiddle:
http://jsfiddle.net/rimian/45Nnv/

如果您仍然遇到问题,可以从swf登录到控制台。为此,您需要能够使用grunt mxmlczeroclipboard source编译闪存到swf。只需在动作脚本中发送一个日志事件(将其编译并复制到您的项目中)并在您的js中对其进行响应:

例如,在ZeroClipboard.as

// constructor, setup event listeners and external interfaces
public function ZeroClipboard() {

  ...

  // Get the flashvars
  var flashvars:Object = LoaderInfo( this.root.loaderInfo ).parameters;

  dispatch("log", flashvars);

  ...

  }

然后在你的js:

zeroclipboard = new ZeroClipboard($('.mybuttons'))
zeroclipboard.on('log', function(client, args) { console.log('log:', args)});

答案 3 :(得分:0)

可能希望尝试Fiddler以确切了解该文件的请求/响应。

答案 4 :(得分:0)

我在ZeroClipboard.min.js上解决了这一行的编辑问题

return a+"ZeroClipboard.swf"

为:

return "//YOUR/PATH/TO/ZeroClipboard.swf"

答案 5 :(得分:0)

同时设置moviePath和swfPath对我有用。

ZeroClipboard.config({ moviePath: '/assets/ZeroClipboard.swf', swfPath: '/assets/ZeroClipboard.swf', debug: true });