我的 flashvars 有问题,当我从浏览器读取 url 时,如果我只为 Id (我的 url 中的参数)分配了数字,则一切正常,但如果我的 id 包含字符,则它不起作用,我不想更改 mxml 文件中 flash 端的任何内容,我想使用 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 完美运行
最佳答案
Flash 将 flashvars 作为字符串接收,如果它对字符串不起作用,那么它必须将它们转换为数字或以其他方式解析它们 - 改变 JavaScript 方面不会改变任何东西,无论你怎么做。然而,你绝对可以改进你在 JavaScript 中所做的事情(谁知道,也许你以后会需要它?)
所以,return不是一个函数,因此return (pair[1])
是多余的,应该是returnpair[1]
。然而,从函数中间返回是一种不好的风格。更糟糕的是,您的函数将返回未定义或字符串 - 良好的风格是一致的,并在每种情况下返回相同的类型。通过生成大量数组来解析字符串是一个坏主意 - 您不需要这样做,而是使用正则表达式。例如,类似这样的东西应该可以完成这项工作: /([^&=]+)=([^&]*)/g
一个好处是正则表达式比其他表达式快得多JavaScript 代码,因为它们是用 C 实现的。函数内部 block 内的变量被“提升” - 这意味着 varpair
实际上是在循环外部声明的。我认为从技术上在实际声明的地方编写变量声明是一种很好的做法 - 这有助于以后避免某些陷阱。
关于javascript - flashvars 不适用于从 url 读取的字母数字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233719/