Некоторая информация от Google: http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_DOM_access
Без дополнительных квалификаторов термин «политика одного и того же происхождения» чаще всего относится к механизму, который определяет способность JavaScript и других языков сценариевполучить доступ к свойствам и методам DOM через домены (ссылка).По сути, модель сводится к этому трехэтапному процессу принятия решения:
Если протокол, имя хоста и - для браузеров, отличных от Microsoft Internet Explorer - номер порта для двух взаимодействующих страниц совпадают, доступ предоставляется бездальнейшие проверки.Любая страница может установить для параметра document.domain правый, полностью определенный фрагмент своего текущего имени хоста (например, foo.bar.example.com может установить для него значение example.com, но не ample.com).Если две страницы явно и взаимно устанавливают для своих соответствующих параметров document.domain одно и то же значение, а оставшиеся проверки того же источника выполняются, доступ предоставляется.Если ни одно из указанных выше условий не выполнено, доступ запрещен.
Информация от Mozilla
Я не могу получить доступ к свойствамновое вторичное окно.Я всегда получаю сообщение об ошибке в консоли javascript, в котором говорится: «Ошибка: необработанное исключение: в доступе отказано в доступе. Почему это так?
Это связано с ограничением безопасности междоменного сценария (также называется«Та же политика происхождения»). Сценарий, загруженный в окно (или фрейм) из другого источника (доменного имени), не может ни получить, ни установить свойства другого окна (или фрейма) или свойства любого из его HTML-объектов, поступающих из другогоразличное происхождение (доменное имя). Поэтому перед выполнением сценария, нацеленного на вторичное окно, браузер в главном окне проверит, что вторичное окно имеет то же доменное имя. Подробнее о ограничении безопасности междоменного сценария: http://www.mozilla.org/projects/secu...me-origin.html
Итак, ваш ответ
- Итак, если протокол, имя хоста и порт совпадают для всех браузеров, кроме IE, это один и тот же домен
- Если протокол и имя хоста совпадают для IE, это тот же домен
В противном случае вы ограниченыicted.
РЕДАКТИРОВАТЬ - реальный ответ
window.open('javascript:doFunction()')
не будет ничего делать, кроме открытия нового пустого окна, которое ничего не делает, потому что doFunction
не определено.Он должен быть определен в том же окне.
Sidenote Я могу сделать запрос xhr того же источника, вставив ajax в URL-адрес напрямую, но он все еще чувствителен к тому же доменуpolicy.
x = window.open('javascript:x = new XMLHttpRequest; x.open("GET", "http://medero.org", false); x.onreadystatechange = function(){ if ( x.readyState != 4 ) { return; }; alert(x); alert( x.responseText );}; try {x.send(null); } catch (e) { alert(e)}; alert("ok"); ');
Сбой в Firefox.И я еще не проверял это в MSIE.Но
Тесты:
( сбой ) Chrome 7 (консоль) от http://stackoverflow.com:80
>>> x = window.open('http://google.com', 'fds', 'width=200, height=300')
>>> x.document.body.innerHTML='test';
TypeError: Cannot read property 'body' of undefined
( успех ) Chrome 7 (консоль) из http://stackoverflow.com:80
>>> x = window.open('http://stackoverflow.com', 'fds', 'width=200, height=300')
>>> x.document.body.innerHTML='test';
"test"
( сбой ) Firefox 3.6 (консоль) из http://stackoverflow.com:80
>>> x = window.open('http://google.com', 'fds', 'width=200, height=300')
>>> x.document.body.innerHTML='test';
Permission denied for <http://stackoverflow.com> to get property Window.document from <http://www.google.com>.
( успех ) Firefox 3.6 (консоль) с http://stackoverflow.com:80
>>> x = window.open('http://stackoverflow.com', 'fds', 'width=200, height=300')
>>> x.document.body.innerHTML='test';
"test"
( сбой ) Firefox 3.6 (консоль) с http://stackoverflow.com:80
$.ajax({
url:'http://bing.com',
success:function(data) {
alert(data) // blank alert
}
})
( success ) Firefox 3.6 (консоль) из http://stackoverflow.com:80
$.ajax({
url:'http://stackoverflow.com',
success:function(data) {
alert(data) // success
}
})