2010-01-28 47 views
1

我遇到了一些用戶在通過我們的軟件訪問我們的在線商店時出現javascript錯誤彈出窗口的問題。該軟件使用標準WebBrowser控件,出現錯誤的用戶包括IE版本6,7和8以及.net 2和3.5的用戶。當他們直接通過IE訪問商店時,錯誤不會出現。在FF或IE8中或者通過我們的軟件都不會出現這個錯誤。在c#.net WebBrowser組件中獲取javascript錯誤

當用戶查看產品的詳細頁面時,僅當此頁面包含一個JavaScript剪輯播放器時纔會出現此錯誤。

錯誤本身只是說:

線:1 字符:59 錯誤:預期 ')' 代碼:文件的1 0

行是文檔類型,那麼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

這出現在每一個頁面中,所以當錯誤只出現在帶有剪輯播放器的頁面上時,我不明白它是什麼原因。

與剪輯播放器相關的html如下。它使用nVelocity,所以這就是所有$ siteroot的東西。我仔細檢查過所有正確的括號。

<script type="text/javascript"> 
       //<![CDATA[ 
        var myListener = new Object(); 

        /** 
        * Initialisation 
        */ 
        myListener.onInit = function() 
        { 
         this.position = 0; 
        }; 
        /** 
        * Update 
        */ 
        myListener.onUpdate = function() 
        {       
         var isPlaying = (this.isPlaying == "true"); 
         document.getElementById("playerplay").style.display = (isPlaying)?"none":"block"; 
         document.getElementById("playerpause").style.display = (isPlaying)?"block":"none"; 
        }; 

        function getFlashObject() 
        { 
         return document.getElementById("myFlash"); 
        } 
        function play() 
        { 
         if (myListener.position == 0) { 
          getFlashObject().SetVariable("method:setUrl", "/appsite/Files/Clips/$story.Value.ClipPath"); 
         } 
         getFlashObject().SetVariable("method:play", ""); 
         getFlashObject().SetVariable("enabled", "true"); 
        } 
        function pause() 
        { 
         getFlashObject().SetVariable("method:pause", ""); 
        } 
        function stop() 
        { 
         getFlashObject().SetVariable("method:stop", ""); 
        } 
        function setPosition() 
        { 
         var position = document.getElementById("inputPosition").value; 
         getFlashObject().SetVariable("method:setPosition", position); 
        } 
        function setVolume() 
        { 
         var volume = document.getElementById("inputVolume").value; 
         getFlashObject().SetVariable("method:setVolume", volume); 
        } 
       //]]> 
       </script> 
       <!--[if IE]> 
       <script type="text/javascript" event="FSCommand(command,args)" for="myFlash"> 
       eval(args); 
       </script> 
       <![endif]--> 

       <object class="playerpreview" id="myFlash" type="application/x-shockwave-flash" data="$siteroot/content/player_mp3_js.swf" width="1" height="1"> 
        <param name="movie" value="$siteroot/content/player_mp3_js.swf" /> 
        <param name="AllowScriptAccess" value="always" /> 
        <param name="FlashVars" value="listener=myListener&amp;interval=500" /> 
       </object> 

       <li><div id="playercontroller"> 
        <div id="playerplay"><a href="javascript:play()" ><img src="$siteroot/content/images/clipplay.png" style="vertical-align: middle;"/></a> Play a short clip.</div> 
        <div id="playerpause" style="display:none;"><a href="javascript:pause()"><img src="$siteroot/content/images/clippause.png" style="vertical-align: middle;"/></a> Pause clip.</div> 
       </div></li> 

回答

0

這看起來更像是你的flash代碼,而不是你的Javascript代碼。您說「某些[您的]用戶」正在解決此問題,因此這是一個間歇性問題,很可能是由網站上的一項特定操作造成的。下面的代碼可能是其中的問題是:

<script type="text/javascript" event="FSCommand(command,args)" for="myFlash"> 
    eval(args); 
</script> 

Flash代碼觸發這個事件,然後調用JavaScript eval在由閃光燈發出的args參數。所以從你的javascript代碼中很難識別這個問題。您可以嘗試通過在eval語句中包裝try/catch來調試,然後在某處輸出值args,以便查看錯誤的代碼。我還建議用eval('('+args+')');替換eval(args);,因爲過去我已經修復了問題when parsing JSON

相關問題