【问题标题】:Getting a javascript error in a c# .net WebBrowser component在 c# .net WebBrowser 组件中出现 javascript 错误
【发布时间】:2010-01-28 14:09:30
【问题描述】:

我们的一些用户在通过我们的软件访问我们的在线商店时收到一个 javascript 错误弹出窗口,我遇到了这个问题。该软件使用标准的 WebBrowser 控件,出现错误的用户包括使用 IE 版本 6,7 和 8 以及 .net 2 和 3.5 的用户。当他们直接通过IE访问商店时,不会出现错误。我在 FF 或 IE8 中或通过我们的软件都不会出现该错误。

当用户查看产品的详细页面并且仅当该页面包含 javascript 剪辑播放器时才会发生错误。

错误本身只是说:

行:1 性格:59 错误:应为 ')' 代码:0

文件的第一行是doctype,所以:
<!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> 

【问题讨论】:

    标签: .net javascript webbrowser-control


    【解决方案1】:

    这看起来更像是您的 Flash 代码而不是 Javascript 代码。您说“某些 [您的] 用户”遇到了问题,因此这是一个间歇性问题,很可能是由网站上的单个特定操作引起的。以下代码可能是问题所在:

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

    您的 flash 代码会触发此事件,然后 Javascript 会在 flash 发送的 args 参数上调用 eval。因此,很难从您的 javascript 代码中识别此问题。您可以通过在 eval 语句周围包装 try/catch 并在某处输出 args 的值来尝试调试它,以便查看错误代码。我还建议将eval(args); 替换为eval('('+args+')');,因为过去when parsing JSON 已经解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2011-07-28
      • 2013-09-11
      • 2013-12-30
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多