flashvars не работают с буквенно-цифровым значением, прочитанным из URL - PullRequest
1 голос
/ 10 февраля 2012

У меня проблема с flashvars, когда я читаю URL из браузера, если я назначил только цифры для Id (мой параметр в URL), все работает нормально, но если мой идентификатор содержит символ, то он не работает, яя не хочу ничего менять во флэш-памяти в файлах 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 голосов
/ 11 февраля 2012

Flash получает flashvars в виде строк, если он не работает со строками, то он должен приводить их к числам или анализировать их каким-либо другим способом - изменение стороны JavaScript ничего не изменит, независимо от того, как вы это делаете , Тем не менее, вы определенно можете улучшить то, что вы делаете в JavaScript (кто знает, может быть, вам понадобится это в другой раз?)

Итак, return не является функцией, поэтому return (pair[1]) является избыточным, должно быть return pair[1]. Однако возвращение из середины функции - плохой стиль. Хуже того, ваша функция будет возвращать либо неопределенное значение, либо строку - хороший стиль будет последовательным и будет возвращать один и тот же тип в любой ситуации. Это плохая идея для анализа строки путем генерации большого количества массивов - вам не нужно это делать, используйте вместо этого регулярные выражения. Например, что-то вроде этого должно сделать эту работу: /([^&=]+)=([^&]*)/g преимущество в том, что регулярные выражения намного быстрее, чем остальная часть кода JavaScript, потому что они реализованы в C. Переменные внутри блоков внутри функции «повышены» - это означает, что var pair фактически объявлено вне цикла. Я бы назвал хорошей практикой техническую запись объявления переменной в том месте, где она объявлена ​​ на самом деле - это впоследствии помогает избежать некоторых ловушек.

...