2013-05-11 4 views
4

Я пытаюсь получить хеш-значение для текущей страницы без успеха. Я нацелен на страницу со ссылкой:jquery не возвращает url hash

http://www.mydomain.com/test.html#hash 

Мой jquery для test.html выглядит следующим образом;

$(document).ready(function() { 
    if (window.location.hash){ 
     console.log ("FOUND HASH"); 
    }else{ 
     console.log ("HASH NOT FOUND"); 
    } 
}); 

Независимо от того, что я делаю, я никогда не получаю хеш-значение; он всегда пуст ». Однако, когда я нарушаю код с Firebug и просматриваю DOM, я четко вижу, что значение хэша установлено правильно под window.location.hash.

Что я делаю неправильно?

Заранее благодарим за помощь.

ANSWER РЕЗЮМЕ: Оказывается, что мой веб-адрес создает оболочку рамки вокруг всей страницы и в этом случае с различными портами. Хэш сохранялся родительским фреймом, но был потерян для дочернего элемента и недоступен кодом jquery. Использование прямого не-загруженного адреса привело к правильному поведению.

+0

что, если вы берете его из Документ готов? что, если вы просто выполняете 'alert (window.location.hash)'. Я уверен, что должна быть какая-то синтаксическая ошибка, потому что это должно сработать ... какой браузер вы используете? какой другой контекст вы можете нам дать? –

+0

не работает внутри или снаружи документа. Я вижу это как с FF, так и с хромированными консолями. добавлена ​​демонстрационная страница выше. – Rob

+0

JFYI, спецификация HTML5 сделала 'frame' и' frameset' ** устаревшие элементы **. http://www.w3.org/TR/html5-diff/#obsolete-elements –

ответ

1

Хэш находится на вашем верхнем уровне кадра/окна. Ваш javascript не находится в этом верхнем окне. Итак, когда вы ссылаетесь на window.location.hash, вы просматриваете URL своего фрейма, а не окно верхнего уровня, которое отображается в строке браузера.

И поскольку ваше окно верхнего уровня и ваш внутренний фрейм не являются одним и тем же доменом/портом, вы не сможете общаться между ними. Сделайте их одним и тем же доменом, и вы можете получить window.location.hash из окна верхнего уровня (что отображается в строке URL браузера).

Если ваши домены одинаковы, так что вы не столкнетесь с same-origin security restrictions, то вы можете получить хэш от URL верхнего уровня с этим:

window.top.location.hash 

FYI, окно верхнего уровня имеет только это она (то есть не там, где ваш браузер):

<HTML><HEAD> 
<META NAME="description" CONTENT="robtune.com"> 
<META NAME="keywords" CONTENT=""> 
</HEAD> 
<FRAMESET border=0 rows="100%,*" frameborder="no" marginleft=0 margintop=0 marginright=0 marginbottom=0> 
<frame src="http://www17.robtune.com:8017/test.html" scrolling=auto frameborder="no" border=0 noresize> 
<frame topmargin="0" marginwidth=0 scrolling=no marginheight=0 frameborder="no" border=0 noresize> 
</FRAMESET> 
</HTML> 
+0

дерьмо, откуда оно взялось? Наверное, я делаю что-то немое, но я точно не понимаю. назад в школу я иду ... – Rob

+0

AHA! Я думаю, что это побочный продукт использования «webforward» и/или «клоакинга» в настройках DNS Zonedit. Все запросы для * .mydomain.com перенаправляются на www17.mydomain.com:myport, который указывает на мой веб-сервер. – Rob

+0

@Rob - да, это звучит как правильный анализ. Вероятно, вам нужно настроить CNAME на IP-адрес вашего веб-сервера, чтобы домен перешел непосредственно на ваш веб-сервер, вместо того, чтобы использовать клоакинг. – jfriend00

0

Вы используете IFRAME на странице и пытаетесь получить хэш ??

и, пожалуйста, дайте нам демо-URL, чтобы он быстро помог вам ответить. Обновлено:

Вы можете использовать:

window.parent.location.hash, чтобы получить хэш-значение.

+0

Ох, человек, вы используете FRAMESET и FRAMES, вот почему вы не получаете HASH. Вы можете попробовать window.parent.location.hash –

+0

ack ... видимо я, но я не понимаю, почему. – Rob

+0

@Rob: каждый кадр будет иметь собственный документ, и он будет работать самостоятельно. например, вы щелкаете по любой ссылке в кадре, она будет перенаправляться на другую страницу, ничего не делая для родительского тела. он будет вести себя так, как он работает в отдельном окне. и URL-адрес, предоставленный для этого окна, не имеет значения HASH «http://www.yourdomain.com/test.html», который не имеет хеш-значения .. поэтому вы получали HASH NOT FOUND .. –

1

вы можете попробовать это:

window.parent.location.hash 
+0

Это не работает, вероятно, потому что у родительского фрейма есть другой порт, как указано выше. – Rob

Смежные вопросы