2013-01-16 33 views
8

Tôi khá mới với JavaScript và tôi đang cố gắng lấy giá trị của biến từ iframe được nhúng. Tôi đã sử dụng thử nghiệm cơ bản để đảm bảo rằng tôi đang nhận được đúng phương pháp ...Truy cập biến JavaScript trong iframe, từ cửa sổ mẹ trên cùng một miền

Tôi đã thử các đề xuất phổ biến và mọi thứ đều trả về 'không xác định'. Tôi muốn sử dụng biến trong sự kiện onclick.

Trong nội dung iframe tôi đã bị tước tất cả mọi thứ và chỉ để thử nghiệm có điều này:

<script> 
var test = "test"; 
</script> 

trong cửa sổ cha mẹ tôi đã làm điều này:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
var myVar = window.frames[0].window.test; 
</script> 
<a href="#" onclick='alert(myVar)' id="link">Click</a> 

Tôi đã thử các tùy chọn gợi ý ở đây: grab global variable from an embedded iframe

Mọi thứ tôi trả về không xác định ... tôi có đang làm gì đó sai về cơ bản không?

Thanks in advance ..

+2

Mã JS của bạn có thể đang chạy * trước * iFrame đã tải xong. –

Trả lời

11

Bạn đã thực hiện kịch bản khi vẫn tải, do đó, nó testundefined. Hoặc là chờ đợi cho sự kiện load của khung nội tuyến, hoặc chỉ nhận được biến khi nhấp:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
var myFrame = window.frames[0].window; 
</script> 
<a href="#" onclick='alert(myFrame.test)' id="link">Click</a> 
+0

Điều đó dường như hoạt động tốt. – Faldinio

7

Bạn đang dường như không chờ đợi cho nội dung của khung được nạp trước khi truy cập myVar. Rất có thể là yếu tố <script> trong khung chưa được tìm nạp hoặc thực hiện khi bạn làm điều đó.

Cố gắng trì hoãn việc giao biến cho đến khi nội dung của khung được nạp đầy đủ:

<iframe src="iframe.html" id="iframe" onload="frameLoaded();" width="200" height="100"></iframe> 

<script> 
    var myVar; 
    function frameLoaded() { 
     myVar = window.frames[0].window.test; 
    } 
</script> 

Là một sang một bên, kể từ khi câu hỏi của bạn được gắn thẻ tôi sẽ đề nghị bạn viết một cái gì đó như:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
    $("#iframe").on("load", function() { 
     var myVar = this.window.test; 
     $("#link").on("click", function() { 
      alert(myVar); 
     }); 
    }); 
</script> 
+0

Không phải công việc đó. Với JavaScript đơn giản, tôi nhận được một lỗi trong firebug nói myVar không được định nghĩa và do đó sự kiện onclick không xảy ra. Với tùy chọn jQuery, firebug nói với tôi rằng this.window.test là undefined. – Faldinio

+1

@Faldinio, thực sự, đó là bởi vì 'myVar' là địa phương trong câu trả lời của tôi. Tôi không hiểu bạn muốn đưa nó vào phạm vi toàn cầu. Trả lời được cập nhật tương ứng. –

+0

Thành thật mà nói, tôi nên phát hiện ra rằng nó đã được định nghĩa trong hàm thay vì ngoài nó, nhưng tôi đã nhìn chằm chằm vào cùng một mã quá lâu! Nó hoạt động với câu trả lời được cập nhật. – Faldinio

3

thử để sử dụng số điện thoại này

<iframe src="iframe.html" id="iframe" onload="loader()" width="200" height="100"> </iframe> 

<script> 
    var myVar 
    function loader(){ 
     myVar = window.frames[0].window.test; 
    } 
</script> 
<a href="#" onclick='alert(myVar)' id="link">Click</a> 
0

Trong giải pháp sang một bên, tôi j ust muốn chỉ ra rằng khi bạn sử dụng hàm xử lý sự kiện onload jquery và bạn muốn truy cập đối tượng jquery "this" này, bạn phải sử dụng ký hiệu $ (this.attr) này.

Các vấn đề liên quan