【问题标题】:Swfobject is changing "&"(ampersand) to "&" How do I stop it?Swfobject 正在将“&”(与号)更改为“and” 我该如何阻止它?
【发布时间】:2013-12-18 19:04:32
【问题描述】:

这是我要嵌入的对象,由swfobject 生成。

<object type="application/x-shockwave-flash" 
name="player" 
id="player" 
data="StrobeMediaPlayback.swf?ID=89.41153136547655" 
width="470" 
height="320">
<param name="flashvars"
value="verbose=true&amp;src=rtmp://s161ki0ys7euuz.cloudfront.net/cfx/st/_definst_/vid_cdntest001?Signature=q-ZT9mWcIorCwGS4xgOysTyRXoUB2yza~JGITwCwx5O0JObgvlvS728vGXaI0iaow4OA8JRdFOBWYeeLQ5klYcjsWtgjzqH37ZVyV-5pyEUgT80DzWOOM9ZVfd2xBaZjISdn4cNk03FRBZ85~Z4zoEkp8MweE2HEzfrHnzZjoXlaulsPuphg59ANZCGQFneGfSI33dYhzTRDnbZbTZAGilLeu8gjtvfgm9hQ80E1zVd7wuHR8hX7or2ZjTgmDBaq4i-Nj8rJI0w3CIKAOu7JBggvclltbDnzMvy76s4Ef~GowYS7GB0p07Whi512GmGB9W1n6TqUBS-m8QK4vvqC~w__&amp;Key-Pair-Id=APKAJSRQXYNPUENHF6HQ&amp;Expires=1387470161&amp;urlIncludesFMSApplicationInstance=true">
</object>

它嵌入了 swf,但 swf 没有按预期运行。我的代码将额外的 flashvars 传递到 swf。

我正在跟踪发送到 swf 的所有参数/闪存变量。我明白了:

PARAMS: = verbose
PARAMS: = Expires
PARAMS: = src
PARAMS: = ID
PARAMS: = urlIncludesFMSApplicationInstance
PARAMS: = Key-Pair-Id

它读取 ExpiresIDKey-Pair-Id 作为 flashvars,而这些都应该是 src 参数的一部分。

原因是src flashvar 的值:

rtmp://s161ki0ys7euuz.cloudfront.net/cfx/st/vid_cdntest2?Signature=rlBXiKxXRHwSha9YB~GZjyojy8gWZXO18Ea5JLZf1PHvuJFfQE617Ea-5aq8QVoVANaSetnoHQMja76ERxBowjG8cIYxWTGP-UBzP2v-k0hZghNGTtn~qSaFRaSHJGMG59ZKW2EobOHDQxV4r7k-ZG3vAJJpFRm7SoP980DRoJM7J6oAhCUKzZOgv6uRT-StsPORU2Ny3iUx7dIf~QWYBbzfcP1cPrZnzlSx~TqnWK4oYJCGmNHjYlVbCvmYAFCRc3oFzdywzGQKeQpwqHMhR1DSrEnzMjC48mFyFXyDp5TL1qhMVNUDX~d6Ds6PoysCXV7zG8QawSdWhzwDoj4Gng__&Key-Pair-Id=APKAJSRQXYNPUENHF6HQ&Expires=1387556045"

如果您将 rtmp url 与我的格式错误的代码进行比较,它会出于某种原因将 &amp;amp; 更改为 &amp;amp;

在这些分号位置,它必须拆分字符串并将以下值作为不同的 flashvar 读取。

我怎样才能阻止这种情况?


这就是我正在做的构建格式错误的 html:

$(document).ready(function(){
    callPlayer("rtmp://s161ki0ys7euuz.cloudfront.net/cfx/st/_definst_/vid_cdntest001?Signature=q-ZT9mWcIorCwGS4xgOysTyRXoUB2yza~JGITwCwx5O0JObgvlvS728vGXaI0iaow4OA8JRdFOBWYeeLQ5klYcjsWtgjzqH37ZVyV-5pyEUgT80DzWOOM9ZVfd2xBaZjISdn4cNk03FRBZ85~Z4zoEkp8MweE2HEzfrHnzZjoXlaulsPuphg59ANZCGQFneGfSI33dYhzTRDnbZbTZAGilLeu8gjtvfgm9hQ80E1zVd7wuHR8hX7or2ZjTgmDBaq4i-Nj8rJI0w3CIKAOu7JBggvclltbDnzMvy76s4Ef~GowYS7GB0p07Whi512GmGB9W1n6TqUBS-m8QK4vvqC~w__&Key-Pair-Id=APKAJSRQXYNPUENHF6HQ&Expires=1387470161");
});

function callPlayer(x){
    $("#PlayerHolder").html("<span id='PlayerDiv'></span>");

    var flashvars = {
        verbose:true,
        src: x,
        urlIncludesFMSApplicationInstance:true
    };

    var parameters = {};

    var attributes = {};

    attributes.name="player";
    attributes.id="player";

    swfobject.embedSWF("StrobeMediaPlayback.swf?ID="+Math.random()*100,"PlayerDiv","470","320","11.2","scripts/expressInstall.swf", flashvars, parameters, attributes); 
}

正确的html由this page生成

【问题讨论】:

  • 为什么不安装 FlashFireBug 并让我们知道当您的文件出错时它会输出什么?
  • @itcouldevenbeaboat 它没有告诉我任何新的东西。它连接到服务器,无法加载 NetStream 然后关闭连接。但是如果我将相同的 flash 文件放入生成的 html 中,它会正常工作
  • 让您的 SWF 文件输出一个trace(),其中包含通过标签传入的所有变量。然后查看该跟踪是什么以及它与默认加载的版本有何不同。
  • @itcouldevenbeaboat 好主意!我会用我学到的知识更新问题

标签: javascript html flash swfobject


【解决方案1】:

显然,这是一个他们不会解决的问题。 is in beta,并且用户对此不太满意。

解决方案是验证您计划发送到 flashvar 的字符串并转义有问题的字符,如下所示:

$(document).ready(function(){
    callPlayer("rtmp://s161ki0ys7euuz.cloudfront.net/cfx/st/_definst_/vid_cdntest001?Signature=q-ZT9mWcIorCwGS4xgOysTyRXoUB2yza~JGITwCwx5O0JObgvlvS728vGXaI0iaow4OA8JRdFOBWYeeLQ5klYcjsWtgjzqH37ZVyV-5pyEUgT80DzWOOM9ZVfd2xBaZjISdn4cNk03FRBZ85~Z4zoEkp8MweE2HEzfrHnzZjoXlaulsPuphg59ANZCGQFneGfSI33dYhzTRDnbZbTZAGilLeu8gjtvfgm9hQ80E1zVd7wuHR8hX7or2ZjTgmDBaq4i-Nj8rJI0w3CIKAOu7JBggvclltbDnzMvy76s4Ef~GowYS7GB0p07Whi512GmGB9W1n6TqUBS-m8QK4vvqC~w__&Key-Pair-Id=APKAJSRQXYNPUENHF6HQ&Expires=1387470161");
});

function callPlayer(x){

    $("#PlayerHolder").html("<span id='PlayerDiv'></span>");
    x = x.replace(/&/g,'%26');
    var flashvars = {
        verbose:true,
        src: x,
        urlIncludesFMSApplicationInstance:true
    };

    var parameters = {};

    var attributes = {};

    attributes.name="player";
    attributes.id="player";

    swfobject.embedSWF("StrobeMediaPlayback.swf?ID="+Math.random()*100,"PlayerDiv","470","320","11.2","scripts/expressInstall.swf", flashvars, parameters, attributes); 
}

或者你可以使用 非官方分支 beta,或者干脆等他们修复它。

不过,关于是否应该修复它的争论非常有趣。

【讨论】:

猜你喜欢
  • 2017-04-22
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2014-09-26
相关资源
最近更新 更多