2009-09-10

javascript로 다른 도메인 호출

<script>
document.domain = "example.net";
$(document).ready(function() {
    $('#call0').bind('click', function(event) {
        alert("loading...");
        // $('#a').load('http://no.example.net/a.php');
        try {
            $.get('http://no.example.net/a.php', function(data) {
                alert(data);
            });
        } catch (e) {
            alert(e);
        }
        alert("done...");
    });
});

var globalVar;
// This will be called by c.js
function assignGlobal(val) {
    globalVar = val;
    alert(globalVar);
}

$(document).ready(function() {
    $('#call1').bind('click', function(event) {
        $(document.createElement('script'))
        .attr('src', 'http://no.example.net/c.js').appendTo('head');
    });
});

$(document).ready(function() {
    $('#call2').bind('click', function(event) {
        frames['f'].func();
    });
});
</script>

<body>
<ul>
<li><a href="#" id="call0">Click: ajax loading. not work.</a>
<li><a href="#" id="call1">Click: script insert</a>
<li><a href="#" id="call2">Click: iframe(requires document.domain setting on both side)</a>
</ul>
<iframe name="f" id="f" src="a.php" width="100" height="50"></iframe>
a.php
<script>
document.domain = 'example.net';
function func() {
    alert('alert from func in a');
}
</script>
c.js
alert('alert from c.js');
assignGlobal('OOOOOOO');
AJAX로 하는 것은 동작하지 않는다. domain을 조절할 수 없다. 위에서 jquery로 script태그를 생성했는데, 이것을 plain javascript로 바꾸면 다음과 같다.
var h = document.getElementsByTagName('head').item(0);
var js = document.createElement('script');
js.setAttribute('src', 'http://no.example.net/c.js');
h.appendChild(js);

댓글 없음:

댓글 쓰기