2012-09-03 31 views
0

我試圖從該框架的父頁面的iframe中執行一個函數。兩者都在同一個域中。
該功能是子頁面上的小部件的一部分,並在頁面加載時激活。在iframe中執行小部件功能

function(){apex.jQuery(document).apex_save_before_exit({...});};; 

一塊小部件代碼:

(function($){ 
$.widget('ui.apex_save_before_exit', { 
    options: { 
     saveMessage: null, 
     noWarningSelector: null, 
     disableTime: null, 
     ignoreChangeSelector: null 
    }, 
    values: { 
     itemChanged: false, 
     promptUser: true, 
     forcePrompt: false, 
     debug: $('#pdebug').length !== 0 
    }, 
    _create: function() {  
    ... 
    }, 
    ..., 
    changeDetected: function() { 
     var uiw = this; 
     var somethingChanged; 
    ... 

我知道小部件的工作原理,因爲當我嘗試在iframe(當不會在iframe中),它可以作爲我期望。

但我想從父頁面調用changeDetected函數。
注:我從螢火蟲控制檯運行這些!

window.frames['cbox1346667865025'].document.apex_save_before_exit('changeDetected') 

在使用

$('iframe.cboxIframe')[0].contentWindow.document 
or 
$('iframe.cboxIframe').contents() 

息率

TypeError: $("iframe.cboxIframe").contents().apex_save_before_exit is not a function 

我在做什麼錯息率

TypeError: window.frames.cbox1346667865025.document.apex_save_before_exit is not a function 

相同的嗎?它甚至有可能嗎?

回答

0

如果iframe的內容與iframe外部的域不在同一個域中,則不能這樣做。

而且你可能想實際元素,而不是一個jQuery對象,所以不是做:

document.getElementById('myiframe').document.someFunction(arg1, arg2,...); 
+0

這兩個網頁位於同一個域(這是我在OP第二個句子;))。我試着用jQuery對象作爲html dom對象:'windows.frames'是純javascript,而jquery'[0]'返回一個html dom元素。那些不起作用,'.contents()'同樣少。我沒有看到爲什麼'getElementById'可以與其他所有工作不同,即使iframe沒有'id'屬性。 – Tom

+0

然後嘗試給iframe一個id並得到它的方式? – PhonicUK

+0

我做了,但結果是一樣的。我必須使用'.contentWindow','.document'是'undefined' - >'document.getElementById('cbiframe')。document' – Tom