2012-02-10 53 views
0

我有一個flashvars的問題,當我從瀏覽器中讀取url時,如果我已經爲Id(我的參數在url中)分配了數字,一切工作正常,但如果我的ID包括字符,然後它不工作,我不想在MXML文件閃一邊去改變什麼,我想用JavaScriptflashvars不能使用字母數字值從url中讀取

這裏做這是我的代碼

<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 完美的作品

回答

0

閃存接收flashvars作爲字符串,如果它不適用於字符串,那麼它必須將它們轉換爲數字或以其他方式解析它們 - 無論您如何操作,更改JavaScript端都不會改變任何內容。然而,你絕對可以改進你在JavaScript中做什麼(誰知道,也許你會需要它一些時間?)

所以,返回不是一個函數,因此return (pair[1])是多餘的,應該是return pair[1]。但是,從函數的中間返回是一種糟糕的風格。更糟糕的是,你的函數會返回undefined或者string - 一個好的風格是一致的,並且在任何情況下返回相同的類型。通過生成大量數組來解析字符串是一個壞主意 - 您不需要這樣做,而是使用正則表達式。例如,像這樣的東西應該可以完成這項工作:/([^&=]+)=([^&]*)/g一個好處是,正則表達式比其他JavaScript代碼快得多,因爲它們是用C實現的。函數內部塊內的變量是「提升的」 - 這意味着var pair是實際上在循環之外聲明。我認爲在技術上將變量聲明寫入實際上是的地方是一種很好的做法 - 這有助於避免某些缺陷。

+0

感謝您的幫助,但我甚至嘗試過不使用此功能,只是簡單地使用flashvars.StartPage = swfobject.getQueryParamValue(「Id」),但仍然是同樣的問題,適用於數字,但不適用於數字和串 – Mahsa 2012-02-10 20:21:48