Параметр к URL, препятствующий правильной работе JavaScript? - PullRequest
1 голос
/ 31 января 2012

Прежде всего, весь мой сайт работает нормально.Все страницы до сих пор не имеют параметра URL.Теперь проблема начинается.У меня есть флэш-баннер, который должен быть статическим изображением PNG на мобильных устройствах Apple.Он прекрасно работает, пока я не создаю страницу с параметром (например: 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>');
} 

Вот сводка моего частичного заголовка представления (только что извлеченного из _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 Ответ

1 голос
/ 31 января 2012
@Html.JsScript("../../Scripts/iOS.js")

Когда вы добавляете элемент к пути, вам нужно добавить ../ к вашим относительным URL или использовать <base href="...">, чтобы убедиться, что относительные 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 присутствует, он должен присутствовать в разделе HEAD документа HTML, перед любым элементом, который ссылается на внешний источник. Информация о пути, указанная элементом BASE, влияет только на URI в документе, где появляется элемент.

...