Ссылка на переход в iFrame

Внутри iframe (на странице-A) у меня есть простая страница (страница-B), которая имеет несколько ссылок перехода (например, <a href="#my-id">jump link</a>) в разные разделы страницы (страница-B). Высота iframe задана дольше, чем высота страницы-B; это требование.

По некоторым причинам ссылки перехода не работают на FF (я на Mac/FF 10.0.2); однако он работал правильно на Safari и IE8. Это страница .

Код страницы

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jump Link Test on an iFrame</title>
</head>
<body>
<h1>Page that has an iFrame</h1>
<iframe width="100%" height="2000" src="./iframe.html" frameborder="0" scrolling="no">
</iframe>
</body>
</html>

Код iframe.html

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>iFrame Content</title>
<style type="text/css">
.box {
    margin: 0 0 5px;
    width: 400px;
    height: 400px;
}
#box1 {
    background-color: #f00;
}
#box2 {
    background-color: #f0f;
}
#box3 {
    background-color: #00f;
}
</style>
</head>
<body>
<ul>
    <li><a href="#box1">Box 1</a></li>
    <li><a href="#box2">Box 2</a></li>

    <li><a href="#box3">Box 3</a></li>
</ul>
<div>
    <div id="box1" class="box"></div>
    <div id="box2" class="box"></div>
    <div id="box3" class="box"></div>
</div>
</body>
</html>

Примечание. Если я устанавливаю высоту iframe < высота страницы-B, проблема будет решена. Однако, к сожалению, это не вариант, учитывая мою ситуацию, потому что у меня нет доступа к странице-A.

Ответ 1

Это невозможно с использованием только HTML.

Как вы можете прочитать в Firefox Отчет об ошибках Nr. 638598 это упоминается давно! Также многим нравится это поведение, но Джонас Сикинг говорит в своем комментарии, что это никогда не изменится. Он видит это как функцию, позволяющую firefox предотвратить эту потенциальную хакерскую функциональность.

если вы не знаете его читайте здесь, что он является Tech Lead проект в mozilla, а также редактор для indexeddb и W3C.

Другие люди пытались найти решения, такие как Matthew, но этот пример не работал в моем коротком тестовом примере с вашей структурой html. Некоторые другие говорят, что он должен работать с JavaScript и функцией scrollTo().

Прошу прощения за то, что это ограничение только FireFox, но надеюсь, что вы счастливы быть в безопасности в понимании этой проблемы.

Ответ 2

Я уже столкнулся с этой проблемой. В моем случае я не мог использовать javascript-решение, потому что мой iframe находился в другом домене, и у меня не было доступа к родительской странице.

Но есть способ обхода HTML.

Измените свою ссылку:

<a href="#my-id">jump link</a>

Для этого:

<a target="_parent" href="http://parenturl.com/#my-id">jump link</a>

Создайте невидимый <div id="my-id"></div> на родительской странице и поместите его с помощью CSS.

Ответ 3

Ммм, просто мысль, есть ли у вас reset поля для iframe? FF имеет тенденцию делать странные вещи, когда вы явно не указываете атрибуты поля.