页面部分加载时Javascript访问被拒绝错误 - 为什么?

时间:2011-04-25 05:10:02

标签: javascript jquery

thirdpartydomain.com 上,我想嵌入一个简单的<script>标记,该标记从 mydomain.com/myscript.js 中提取一个脚本,稍微<div>并从 mydomain.com/mypage.htm 中提取部分网页内容。

以下是改编自How to embed Javascript widget that depends on jQuery into an unknown environment

的脚本
var myEmbedId = '12345';
var myEmbedContainerId = 'myEmbedContainer_' + myEmbedId;
document.write('<div id="' + myEmbedContainerId + '">IF ALL GOES WELL, THIS TEXT WILL BE REPLACED WITH MYPAGE.HTM CONTENTS');
document.write('</div>');

    (function (window, document, version, callback) {
        var j, d;
        var loaded = false;
        if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) {
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "http://mydomain.com/jquery-1.4.1.min.js";
            script.onload = script.onreadystatechange = function () {
                if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
                    callback((j = window.jQuery).noConflict(1), loaded = true);
                    j(script).remove();
                }
            };
            document.documentElement.childNodes[0].appendChild(script)
        }
    })(window, document, "1.3", function ($, jquery_loaded) {
        $(document).ready(function () {
            alert('jquery loaded!');

            var myRefreshUrl = 'http://mydomain.com/mypage.htm';
            alert('refreshing from ' + myRefreshUrl);

            $.get(myRefreshUrl, function(data){ 
                var returnData = data;
                alert('return data: ' + data);
                $('#' + myEmbedContainerId).html(data); });

            alert('load complete v2');

        });
    });

在IE中,我从Javascript获得了Access Denied错误;在Firefox中我只是没有返回数据。

这有什么问题?

1 个答案:

答案 0 :(得分:3)

您无法创建与托管当前窗口上下文的域不同的域的AJAX请求。

要完成您所描述的内容,您可以执行以下操作:

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://mydomain.com/dynamic.js?data=somepage.htm';
someContainer.appendChild(script);

dynamic.js内,您可以将HTML内容包装在document.write()中。净效果与在DOM中的同一点插入AJAX请求的结果相同。