Имам ситуация на страница, в която скрипт на www.example.com/index.html отваря home.example.com/foo.html в изскачащ прозорец . Когато потребителят затвори изскачащия прозорец, искам да уведомя отварящата страница, като извикам функция на Javascript в нея (която прави няколко неща с DOM). Използвам unbeforeunload
така:
// In index.html on www.example.com:
window.fn = function () { /* Perform stuff after foo.html has closed */ }
// In foo.html on home.example.com:
window.onbeforeunload = function () {
if (window.opener && window.opener.fn)
window.opener.fn();
};
Това не работи, защото уеб страниците са в различни домейни. Мога да настроя свойството document.domain
, за да преодолея това:
document.domain = "example.com";
За съжаление, това не работи добре с рамката на уеб приложението, която използвам от страна на foo.html (Apache Wicket), тъй като включва скрипт, който прави нещо подобно:
var src = (window.location.protocol == 'https:') ? something : other;
Очевидно в IE6*, когато зададете домейна на документа, обектът location
става само за запис и така опитът за четене на window.location.protocol
извежда „Достъпът е отказан“.
И така, въпросът ми е: Как да разреша извиквания на функции на Javascript между домейни, като същевременно позволявам на моите скриптове да четат съдържанието на обекта location
?
- Не мога да премина през сървъра. (Работата, извършена от функцията, която искам да извикам, всъщност не се изпълнява по този начин.)
- Не мога да прочета свойството
window.location.protocol
преди да задамdocument.domain
и след това да използвам тази стойност в условното присвояване; това ще изисква от мен да възстановя библиотеките на уеб рамката - не е нещо, което искам да направя.
* Вероятно и в други версии на IE; не са проверили.