Próba różnych kombinacji ustawień położenia ramki lub skrótu niestety zakończyła się przewijaniem rodzica.
Tak właśnie zrobiłem, ponieważ zawartość elementu iframe znajdowała się w tej samej domenie, więc nie było problemu z wieloma witrynami nawigującymi po ramce DOM.
Zmodyfikowałem łącza w rodzica, więc zamiast wykonywać target="myiframe"
, dodałem funkcję godziny do przewijania z pominięciem domyślnej implementacji (która wydaje się powodować, że rodzic przeskoczył do elementu iframe).
funkcja
<a onclick="linkFunction(this, event);return false;"...
Link wygląda następująco:
/// for scrolling iframe without jumping parent page
function linkFunction(atag, event) {
event.preventDefault();
var iframe = document.getElementById('myiframe');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var name = atag.href.split('#')[1]; // get the hash
var anchor = innerDoc.getElementsByName(name)[0]; // find the corresponding anchor tag
// get position of the anchor relative to the current scroll position
var offset = anchor.getBoundingClientRect().top
// jump scroll the iframe content to the anchor
iframe.contentWindow.scrollBy(0, offset)
}
Nie JQuery i nadal działa poprawnie, jeśli wyłączony javascript (tylko powróci do domyślnego dominującej skoków).
Mam nadzieję, że to pomoże komuś innemu.
Zweryfikowano w Chromium 17 –
Mam ten sam problem. Sprawdzono Chrome i FF. –