【问题标题】:Parameter to a URL preventing javascript from working properly?阻止javascript正常工作的URL参数?
【发布时间】:2012-01-30 22:02:24
【问题描述】:

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

知道发生了什么吗?

【问题讨论】:

  • 通常,URL 上下文中的“参数”指的是查询中的某些内容,如/path?param-name=param-value。 “mysite.com/Controller1/Page1/1”中的参数是什么意思?
  • mysite.com/Controller1/Page1/1 等于 mysite.com/Controller1/Page1//path?id=1。它只是更清洁。当然需要设置。
  • 所以“mysite.com/Controller1/Page1”有效,但“mysite.com/Controller1/Page1/1”无效?
  • 页面可以正常工作,只是没有调用 javascript,所以 flash 和静态横幅显示在另一个之上(因为 flash 是透明的,所以很难看)
  • iOS.js 是通过相对 URL 加载的吗?添加路径元素时,需要在相对 URL 中添加 ../ 以使其引用相同的内容。

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


【解决方案1】:
@Html.JsScript("../../Scripts/iOS.js")

向路径添加元素时,您需要在相对 URL 中添加 ../ 或使用 &lt;base href="..."&gt; 以确保相对 URL 解析为相同的绝对 URL。

也许上面应该变成

@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 解析的。 BASE 元素允许作者明确指定文档的基本 URI。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多