Вам понадобится Opera 9.62, чтобы понять, о чем идет речь ... Потому что это единственный браузер, который ведет себя странно, когда я выполняю кросс-доменные вызовы JavaScript (с включенным Ajax).Пожалуйста, рассмотрите следующие три простых файла и разместите их в соответствующих доменах.
foo.html
(родительский элемент boo.html iframe) в foo.example.com
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>foo</title>
<script type='text/javascript'>
document.domain = 'example.com';
function sendRequest() {
window.frames['boo'].sendRequest();
}
</script>
<head>
<body>
<input type="submit" value="sendRequest" onclick="sendRequest();" />
<iframe name="boo" src="http://boo.example.com/boo.html"></iframe>
</body>
</html>
boo.html
(iframe of foo.html) в boo.example.com
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>boo</title>
<script type='text/javascript'>
document.domain = 'example.com';
function sendRequest() {
var request = null;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
if (request) {
request.open('GET', 'http://boo.example.com/helloworld.php', true);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var result = request.responseText;
alert(result);
}
}
request.send('');
}
}
</script>
<head>
<body>
</body>
</html>
helloworld.php
в boo.example.com
<?php
echo 'Hello World!';
?>
Если вы тестируете вышеуказанный код в браузерах, отличных от Opera (протестировано на версии 9.62), оно работает как чудо (я тестировал вSafari, Firefox, Chrome).В Opera это не работает и выдается ошибка с сообщением о нарушении безопасности.Кто-нибудь знает, в чем дело?Я нашел решение проблемы, и я опубликую его здесь чуть позже ( Я также хотел бы увидеть ваши решения ), но я также хотел бы узнать больше о проблеме -Кто-нибудь может объяснить это?
ОБНОВЛЕНИЕ : Я только что проверил это на новейшей Opera 10.63 , и у такой проблемы нет .Так что вам определенно нужно использовать Opera v9.62 для наблюдения за проблемой .