flashvars不使用从url读取的字母数字值

时间:2012-02-10 19:34:50

标签: javascript asp.net flash query-string swfobject

我遇到flashvars的问题,当我从浏览器中读取url时,如果我已经将数字分配给Id(我在url中的参数),一切正常,但如果我的id包含字符,那么它不起作用,我不想在mxml文件中更改闪存方面的任何内容,我想用javascript进行操作

这是我的代码

   <script type="text/javascript">
   function getQueryVariable(variable) 
   {
    var query = window.location.search.substring(1);  
    var vars = query.split("&");  
    for (var i=0; i<vars.length; i++) 
    {    
        var pair = vars[i].split("="); 
        if (pair[0] == variable)
            return (pair[1]);
    }
}
  </script>  

以及稍后的代码

    flashvars.StartPage = getQueryVariable("Id"); 

     swfobject.embedSWF(
            "myFlashFile.swf", "flashContent", 
            "100%", "100%", 
            swfVersionStr, xiSwfUrlStr, 
            flashvars, params, attributes);

不起作用的一个例子是

myUrl / Default.aspx的α-ID = 0061A

,而

myUrl / Default.aspx的α-ID = 0061 完美地运作

1 个答案:

答案 0 :(得分:0)

Flash接收flashvars作为字符串,如果它不适用于字符串,那么它必须将它们转换为数字或以其他方式解析它们 - 改变JavaScript方面不会改变任何东西,无论你怎么做。但是,你可以肯定地改进你在JavaScript中做的事情(谁知道,也许你会在其他时间需要它?)

因此,return不是函数,因此return (pair[1])是多余的,应该是return pair[1]。但是,从函数中间返回是一种糟糕的风格。更糟糕的是,你的函数将返回undefined或string - 一个好的样式是一致的,并在每种情况下返回相同的类型。通过生成大量数组来解析字符串是一个坏主意 - 您不需要这样做,而是使用正则表达式。例如,像这样的事情应该做的工作:/([^&=]+)=([^&]*)/g奖励是正则表达式比其他JavaScript代码快得多,因为它们是用C实现的。函数里面的块内的变量是“提升的” - 这个表示var pair实际上是在循环外声明的。我称之为在实际声明的地方技术性地编写变量声明是一种很好的做法 - 这有助于避免某些陷阱。