Четене на window.location след настройка на document.domain в IE(6)

Имам ситуация на страница, в която скрипт на 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; не са проверили.


person gustafc    schedule 30.09.2009    source източник


Отговори (2)


Можете ли да използвате jQuery? Има хубав плъгин, който ви позволява да правите window.postMessage през iframe в IE 6-8: http://benalman.com/code/test/js-jquery-postmessage/

Можете да отворите своя изскачащ прозорец от iframe и да прехвърлите вашия обект между iframe и родител с postMessage.

person Will Peavy    schedule 04.10.2009
comment
Това вероятно е най-добрият ми удар. Благодаря. - person gustafc; 07.10.2009

Не мога да прочета свойството window.location.protocol преди да задам document.domain и след това да използвам тази стойност в условното присвояване; това ще изисква от мен да възстановя библиотеките на уеб рамката - не е нещо, което искам да направя.

не можете ли да прочетете window.location.protocol преди да зададете document.domain и да зададете window.location.protocol, след като стане само за запис? Това ще изисква ли и възстановяване на рамката? това е хак, но също и IE.

person Mohammad    schedule 30.09.2009
comment
За съжаление не става. Остава само за писане дори след като му пиша. - person gustafc; 01.10.2009