URL的参数阻止javascript正常工作?

时间:2012-01-30 22:02:24

标签: javascript html asp.net-mvc razor asp.net-mvc-routing

首先,我的整个网站都运行正常。到目前为止,所有页面都没有URL参数。现在问题开始了。我有一个flash横幅,必须是Apple移动设备上的PNG静态图像。它工作得很好,直到我创建一个带参数的页面(例如:mysite.com/Controller1/Page1/1)。只要有参数,就会出现两个横幅(闪光和PNG)。

这是我的iOS.js:

if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i))
{
    alert("This was called - Mac mobile devices");
    document.write('<style type="text/css"><!--#swf{display:none;}--></style>');
}
else {
    alert("This was called - PC");
    document.write('<style type="text/css"><!--#no-swf{display:none;}--></style><script src="js/swfobject_modified.js" type="text/javascript"></script>');
} 

这是我的部分视图Header的摘要(刚刚从_Layout中提取行为相同):

@Html.JsScript("../../Scripts/iOS.js")

<div id="swf">
    MY FLASH BANNER
</div>
<div id="no-swf">
    MY STATIC IMAGE
</div>

当我尝试普通页面(没有参数)时,我总是有消息框This was called - PC但是当我添加参数时(即使在同一页面上!),我也没有收到任何消息。

也许是路由问题?我简化为最多只留下一条路线:

   routes.MapRoute(
        null, // Nom d'itinéraire
        "{controller}/{action}/{id}", // URL avec des paramètres
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Paramètres par défaut
    );

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

@Html.JsScript("../../Scripts/iOS.js")

在路径中添加元素时,您需要向相对网址添加../或使用<base href="...">确保相对网址解析为相同的绝对网址。

也许上面应该成为

@Html.JsScript("../../../Scripts/iOS.js")

或者您可以添加

<base href="http://mysite.com/Controller1/Page1/">

靠近页面顶部。

http://www.w3.org/TR/html4/struct/links.html#h-12.4

  

在HTML中,外部图像,小程序,表单处理程序,样式表等的链接和引用始终由URI指定。根据基URI解析相对URI,基URI可能来自各种来源。 BASE元素允许作者明确指定文档的基本URI。

     

如果存在,BASE元素必须出现在HTML文档的HEAD部分中,在引用外部源的任何元素之前。 BASE元素指定的路径信息仅影响元素出现的文档中的URI。