2012-10-11 90 views
1

我有一個頁面,我需要動態創建一個iframe並將其粘貼到頁面上的div。我創建的iframe這樣的:如何處理動態設置動態iframe內容

var frame = $('<iframe>') 
    .attr('id', 'myIframe') 
    .addClass('someClass') 
    .appendTo($('#someDiv')); 

取決於一些條件,我需要:A)設置的IFRAME SRC至其他網頁或b)一些HTML動態地添加到iframe中。

我已經選擇A工作正常,但B選項是拋出安全錯誤:

if (someCondition) { 
    // option A, works fine 
    frame.attr('src', someURL); 
} else { 
    // option B, blows up with "Access is denied." 
    $(frame[0].contentWindow.document).find('body').html(someHTML); 
} 

我需要嘗試將HTML之前設置的動態iframe中document.domain?我怎麼會這樣做呢?是否有更簡單的方法將動態內容附加到動態iframe?

在此先感謝。

編輯這裏是動態的iframe的HTML渲染,如要求:

<div id="someDiv"> 
    <iframe id="myIframe" class="someClass"></iframe> 
</div> 

回答

1

我能夠使用類似的答案修復到this question爲了得到解決此問題:

var frame = $('<iframe>') 
    .attr('id', 'myIframe') 
    .addClass('someClass') 
    .attr('src', 'javascript:(function() {' + 
     'document.open();document.domain=\'myDomain.net\';document.close();' + 
    '})();'); 
    .appendTo($('#someDiv')); 

這是每個定義的破解,但我認爲這是解決問題的最好方法。

2

很抱歉,但如果IFRAME從另一個域引用URL來源,你不能訪問它。

http://javascript.info/tutorial/same-origin-security-policy

話雖這麼說,你可以訪問它的身上,只要你有無論是從同一個域中的URL,或者如果您填寫與src屬性「的javascript:無效(0);」。在此之後,嘗試訪問這樣說:

$($('iframe').contents().get(0)).find('body') 
+0

即時通訊不試圖訪問另一個域的任何東西 - iframe是動態生成的,在上面幾行,我試圖設置html。 – jbabey

+0

'javascript:void(0);'src'中的內容看起來什麼都不做,並且嘗試訪問iframe上的'.contents()'會給我「權限被拒絕」。 – jbabey

+0

你可以發佈在你的身體中生成的完整的HTML iframe標籤嗎? – ChuckE

0

當您創建的iframe確保它有一個src指定:

src='about:blank' 

或服務器,並指向

上創建blank.html
+0

在這兩種情況下,當我嘗試設置HTML時,它仍然會給我「訪問被拒絕」。 – jbabey