2017-02-10 47 views
0

我有一個頁面,我動態創建一個空的iframe。然後,我需要通過檢索一些js-script響應數據來填充iframe內容。從js響應動態iframe內容

(function(d) { 
    var iframe = d.body.appendChild(d.createElement('iframe')), 
     doc = iframe.contentWindow.document, 
    options = { 
     objid: 152, 
     key: 316541321 
    }, 
    src = "host/widget.js", 
    uri = encodeURIComponent(JSON.stringify(options)); 

    iframe.id = "iframewidget"; 
    iframe.width = 200; 
    iframe.height = 300; 
    var html = '<body onload="var d=document;' + 
     'd.getElementsByTagName(\'head\')[0].appendChild(d.createElement(\'script\')).src=\'' + src + '\'">'; 
    doc.open().write(html); 
    doc.close(); 
})(document); 

但我需要一些動態參數運行widget.js:當我打電話JS URL,一切工作正常。有沒有辦法將uri變量值傳遞給腳本?我使用純JavaScript而不是jQuery

+0

只需將查詢字符串附加到js文件?或者你的意思是什麼樣的參數? – Connum

+1

您確定iFrame正是您需要創建的內容嗎?通常iFrame用於將外部代碼加載到頁面中,例如外部HTML,PHP等頁面。您動態創建iFrame,然後您需要在「src」屬性上傳遞變量。然後你正在加載的頁面負責處理這些變量。如果您打算純粹從您的JavaScript呈現「框架」,所有的邏輯都是「外部」的,您應該更好地創建一個簡單的HTML容器(DIV)。 – Strahdvonzar

+0

@Connum如何做到這一點?我需要widget.js使用我的代碼中提到的「uri」值 – mogilka

回答

1

下面是您的代碼的快速修改,以顯示其可能性。

您的doc變量是iFrame的文檔元素。在其上設置變量將允許您從iFrame內運行的代碼訪問它。

https://jsfiddle.net/78gf5e8q/

(function(d) { 
    var iframe = d.body.appendChild(d.createElement('iframe')), 
     doc = iframe.contentWindow.document, 
    options = { 
     objid: 152, 
     key: 316541321 
    }, 
    //src = "host/widget.js", 
    uri = encodeURIComponent(JSON.stringify(options)); 
     doc.someVar = "Hello World!"; 
    iframe.id = "iframewidget"; 
    iframe.width = 200; 
    iframe.height = 300; 
    var html = '<body onload="var d=document;' + 
     'd.getElementsByTagName(\'head\')[0].appendChild(d.createElement(\'script\')).innerHTML=\'alert(document.someVar)\'">'; 
     doc.open().write(html); 
    doc.close(); 
})(document); 

編輯:你也傳遞一個不存在的變種叫JS進doc.open()寫(JS)。我將它改爲.write(html);

編輯2:對於跨域,您可能會在該變種上獲得「權限被拒絕」。

+0

感謝您的糾正。我會嘗試你的版本 – mogilka

+0

很高興它的作品,感謝您的投票! – executor