2013-07-09 131 views
0

我的索引HTML變量:添加到iframe的全球範圍內

<html> 
<head> 
    <title>index</title> 
    <script src="jquery.js"></script> 
</head> 
<body> 
    <h1>Index</h1> 
    <hr/> 
    <iframe id="frame"></iframe> 
    <hr/> 
    <button id="btn">Click</button> 

    <script> 
    $(function(){ 

     window.api = { 
      fun: function(){alert('index api')} 
     }; 

     var frame = document.getElementById('frame'); 
     frame.src = 'frame.html';   
    }); 


    $('#btn').click(function(){ 
     $('#frame').contents().find('body').css('backgroundColor', 'red'); 
     $('#frame').contents().find('#btn').text('lol'); 
    }); 
    </script> 

</body> 
</html> 

在加載frame.html的JavaScript可以通過parent.api存取權限的api對象。

是否可以添加一個API對象frame.html窗口,所以它可以通過window.api在那裏? (而不是parent.api)(考慮相同來源和不同來源)?

上述代碼確實有效(例如#button更改背景和標籤),但我認爲這是因爲所有這些文檔都在我的電腦上(同一來源)。我對嗎?

+0

如果iframe是從一個不同的域,相同的來源政策阻止你訪問它。這是設計。 –

+0

在這裏使用[Chrome](http://stackoverflow.com/a/5664399/1169519)? – Teemu

回答

1

假設你現在還沒有遇到。如果內容是在不同的領域,它不能保證你將能夠訪問的窗口即使採用相同的起源策略

var frame = document.getElementById('frame'); // get the frame 
frame.addEventListener('load', function() { // only access when loaded 
    var win = frame.contentWindow; // get reference to iframe's `window` 
    win['foo'] = 'bar'; // set global (within iframe) 
}); 
frame.src = 'frame.html'; // load up page in iframe 

CORS成立。

的方式職能和工作範圍意味着他們多一點很難在正確的背景下做的,你就必須要麼使他們通用的,所以它並不關心或使用new win.Function

+0

非常好!首先,'window.foo'會在frame.html中加載(即在jquery'$(function(){..});''我剛剛嘗試過,看起來並不如此,就像'parent'中的'load'是在框架中的jquery onload代碼之後啓動的。其次,當iframe從不同的原點傳入時,iframe可以訪問父代? – Kiel