window.location.href в iframe не работает в FireFox - PullRequest
0 голосов
/ 14 октября 2011

На сайте www.example.org у меня есть якорь #anchor. Я должен работать с якорями, потому что этот сайт написан на GWT и встроен в iframe (и оба сайта имеют разные домены).

К счастью, я нашел решение прокрутки до якоря, которое работает в Chrome, Safari, IE7, IE8, IE9, но оказывается, что оно не работает в Firefox.

В своем коде я проверил, является ли браузер одним из IE. Если да, то я делаю это:

window.location = www.example.org#anchor

и это прекрасно работает.

Если браузер не является одним из тех IE, то я делаю это:

window.location.href = '#anchor';

и это прекрасно работает в Chrome и Safari.

Однако ни одно из этих решений не работает с Firefox (6). У кого-нибудь есть идеи, как можно прокрутить FireFox на якорь?

P.S. scrollIntoView, scrollTo (0,0) и получение элемента для прокрутки до этого элемента в этом случае не работает ... После нескольких дней попыток я понял, что работают только якоря.

Ответы [ 5 ]

3 голосов
/ 20 марта 2012

Я знаю, что это было некоторое время назад, но я только что столкнулся с той же проблемой и отверг ужасное, но эффективное решение.Проблема: Firefox не отвечает на location.hash в некоторых фреймах.Простой пример, размещенный выше в jsfiddle, работает, но более сложные примеры (в моем случае в приложении Facebook) - нет.Решение: создайте визуально скрытый элемент INPUT в том месте, где вы хотите привязку.

<input id="top_anchor" type="text" style="position:relative; z-index:-1; float:left">

CSS предназначен для того, чтобы заставить браузер думать, что ввод видим, но на самом деле сделать элемент невидимым дляПользователь, измените, как считаете нужным для вашего собственного случая.Z-index отобразит его ниже родительского элемента (вам может понадобиться возиться с родительским элементом, чтобы заставить его работать полностью), а примененный к нему float поможет сворачиванию ввода в его родительском элементе.Важно, чтобы мы не использовали «display: none» или «visibility: hidden», потому что браузер сочтет этот элемент визуально скрытым, а следующая часть не будет работать.

Следующая часть: в вашемjavascript, вместо того, чтобы изменять хеш или местоположение, мы находим гораздо более коварный способ заставить браузер перейти к определенной точке страницы:

document.getElementById('top_anchor').focus();

Я только что протестировал это в Firefox 8, и он работаетотличный.Грустно, что такой неискренний хак сработает, но оригинальный код с благими намерениями не сработает;но я полностью понимаю мыслительный процесс, согласно которому определенные действия должны запускаться действиями пользователя.

1 голос
/ 05 октября 2012

Попробуйте это:

setTimeout(window.location.hash = "anchor",500)
0 голосов
/ 23 апреля 2013

Большое спасибо за указание на window.location.hash вместо window.location.href.

С помощью window.location.hash я смог перезагрузить страницу с привязкой!

<a href="javascript:window.location.hash = '#anchor';
window.location.reload(true);">Link text...</a>
0 голосов
/ 14 октября 2011

Имеет ли элемент, который вы прокручиваете, свойство ID, и этот идентификатор используется только один раз?

0 голосов
/ 14 октября 2011

Использование:

window.location.hash = "anchor"

Это должно сработать в любом браузере. Вот живой пример , который работает в Firefox. Кроме того, a-якорь должен быть виден, когда установлен хеш, иначе FF7 не будет прыгать на якорь. Вот пример , что не работает в FF7, демонстрирует то, что вам запрещено делать.

...