【问题标题】:ZeroClipboard SWF does not loadZeroClipboard SWF 不加载
【发布时间】:2010-09-18 12:29:25
【问题描述】:
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 上工作??

我该如何解决这个问题?

非常感谢您的帮助!

【问题讨论】:

  • 你可以尝试加载(全路径)
  • ZeroClipboard.setMoviePath("domain2.com/js/zeroclipboard/ZeroClipboard.swf");
  • 如果它s working.. - its 路径有问题。
  • 也试过了,没有运气。顺便说一句,你可以编辑你的 cmets。
  • 也许你有 .htaccess 文件?它可以阻止 it.JS 文件加载而没有错误吗?使用(萤火虫)

标签: javascript jquery flash clipboard zeroclipboard


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    要使用零剪贴板 1.0.7 中提供的新富 HTML 功能,您必须将影片路径设置为新的“ZeroClipboard10.swf”文件,该文件包含在 1.0.7 存档中。示例:

        ZeroClipboard.setMoviePath( 'ZeroClipboard10.swf' );
    

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

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

    【讨论】:

    • 尝试使用ZeroClipboard10.swf 仍然不起作用。太奇怪了,我仔细检查了路径和所有内容,但它仍然无法在 domain1 上运行,但在 domain2 上运行良好!
    • 我发现重命名文件时出现问题。
    【解决方案3】:

    有跨域资产的选项:

    // 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

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

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

    这是我的配置:

      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 mxmlc 将闪存从zeroclipboard 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)});
    

    【讨论】:

      【解决方案4】:

      可能想尝试Fiddler 来查看文件的请求/响应究竟是什么样的。

      【讨论】:

        【解决方案5】:

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

        return a+"ZeroClipboard.swf"
        

        到:

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

        【讨论】:

          【解决方案6】:

          设置 moviePath 和 swfPath 对我有用。

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

          【讨论】: