Aha. Я нашел baseURI
свойство. Теперь мы говорим.
Основная проблема заключается в том, что baseURI
документа, который выполняет код (родительский), установлен на местоположение родителя. Вы хотите, чтобы baseURI страницы был таким же, как местоположение дочернего элемента, прежде чем изменить его местоположение, чтобы относительный URL-адрес разрешался в контексте дочернего элемента.
Короче, было бы здорово сказать:
var originalURI = document.baseURI; // store for setting back after the move
document.baseURI = childDocument.location; // setting parent's baseURI (NO EFFECT!)
childDocument.contentWindow.moveOn();
document.baseURI = originalURI; // restore original baseURI
К сожалению, свойство baseURI
имеет значение только для чтения . К счастью, его значение взято из тега <base>
, который вы можете изменить с помощью скрипта. Вы можете получить желаемую функциональность для данного потомка, установив базовый тег родителя для ссылки на childUrl:
<head>
<base href="/path/to/child.html" />
</head>
К сожалению, это делает любые относительные ссылки в вашем родителе относительно ребенка, а это не то, что вам нужно. Мы должны установить это сразу после нажатия на ссылку и вернуть его обратно после того, как ребенку сказали moveOn()
.
Если вы включите пустой тег <base />
в <head>
вашего родителя, он не повлияет на baseURI по умолчанию. Поэтому, когда вы хотите выполнить функцию moveOn()
в дочернем элементе, вы можете сказать что-то вроде:
var baseElement = document.getElementsByTagName("base")[0];
// adopt the child's location as baseURI
baseElement.href = childDocument.location;
childDocument.contentWindow.moveOn();
// revert back to the parent's original baseURI
baseElement.removeAttribute("href");
(надеюсь, это как-то поможет - через два года ... га)
Edit:
Еще раз Internet Exploder - участник вечеринки. Кажется, что изменения в любом теге после загрузки не принимаются. Поэтому, если вам не нужно поддерживать IE (HA!), Это решение не будет работать, если вы не будете рады жестко закодировать местоположение ребенка в теге родителя. Опять же, это большие ifs.