JS文件引用令人困惑的行为

时间:2013-07-29 20:15:53

标签: javascript asp.net web

我有一个带有一些JS文件引用的ASP.Net站点。在我的母版页标题中,我有3个始终引用的文件和一个函数

    <script src="/EPS/Scripts/jquery-1.10.0.min.js" type="text/javascript"></script>
    <script src="/EPS/Scripts/jquery-ui.min.js" type="text/javascript"></script>
    <script src="/EPS/Scripts/menu.js" type="text/javascript"></script>    

    <script language="javascript" type="text/javascript">

        function checkJavaScriptValidity() {
            document.getElementById("jsDisabled").style.visibility = 'hidden';
            document.getElementById("jsEnabled").style.visibility = 'visible';            
        }

    </script>

然后在我的一个aspx页面中,我有一些更多的引用(也使用ContentPlaceHolders添加到页面标题中)

    *JS1*<script type="text/javascript" language="javascript" src="https://serverapi.arcgisonline.com/jsapi/arcgis/3.5"></script>       
    <script src="/EPS/Scripts/savestate.js" type="text/javascript" >   </script>
    *JS2*<script src="/EPS/EPS_Controls/wcMapControl.js" type="text/javascript" >  </script>

问题: 我有一个用户控件,它使用我用 JS1 JS2 标记的文件(这些标签不在源代码中)。当加载/使用控件时,我在JS中出错或者它没有运行。在过去的几个小时里,我尝试了几件事(订单和地点)并没有什么区别。

浏览器

IE8:在当前的顺序中,我得到错误:“Microsoft JScript运行时错误:'undefined'为null或者不是JS1中的对象”

FF v22.0 我没有收到任何错误消息(或至少我找不到它们)但我知道我的JS没有运行

现在这是我的困境,我在另一个测试项目中使用了 SAME 控件和那些 SAME JS文件,它工作正常o那里有任何问题!

问题关于为什么会发生这种情况的任何线索/想法?我的项目中的哪些配置会影响/导致这个?

2 个答案:

答案 0 :(得分:1)

请记住,当涉及到javascript时,一切都取决于浏览器看到的内容 - 您的服务器代码,项目配置或应用程序中的任何其他内容都不会导致javascript问题。

考虑到这一点,只需在您的页面上运行View Source即可。我的猜测是你的脚本标签在控件之后被放入,所以控件正在尝试做尚未定义的事情。一旦你确认了这一点,找出带有脚本的内容占位符的位置,并相应地移动它 - 它现在可能在体内,只需要进入头部,或者至少在体内更高。

答案 1 :(得分:1)

为确保正确加载外部脚本,请在母版页中使用ScriptManager,在内容页面和用户控件中使用ScriptManagerProxy。例如,在母版页中:

<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
    <asp:ScriptReference Path="/EPS/Scripts/jquery-1.10.0.min.js" />
    <asp:ScriptReference Path="/EPS/Scripts/jquery-ui.min.js" />
    <asp:ScriptReference Path="/EPS/Scripts/menu.js" />
</Scripts>
</asp:ScriptManager>

在内容页面

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Scripts>
    <asp:ScriptReference Path="https://serverapi.arcgisonline.com/jsapi/arcgis/3.5" />
    <asp:ScriptReference Path="/EPS/Scripts/savestate.js" />
</Scripts>
</asp:ScriptManagerProxy>