2011-04-25 45 views
1

thirdpartydomain.com我想嵌入一個簡單的<script>標籤在一個腳本拉從mydomain.com/myscript.js,它只是從mydomain.com/mypage創建一個小<div>和拉動部分頁面內容.htmJavaScript訪問拒絕頁面部分加載錯誤 - 爲什麼?

這裏的劇本,改編自: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拒絕訪問錯誤;在Firefox中我只是沒有返回數據。

這是怎麼回事?

回答

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,你可以在一個document.write()包裹的HTML內容。最終效果與在DOM中的相同位置插入AJAX請求的結果相同。

+0

+1打我吧:) – 2011-04-25 05:16:07

+0

crossdomain是req'd,所以document.write()即將得到一個鍛鍊。謝謝 – Brandon 2011-04-25 05:21:55