2012-09-03 35 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