在iframe中定义的Javascript回调函数

时间:2012-11-12 15:44:42

标签: javascript jsf iframe callback

我正在尝试将Drools-Guvnor独立编辑器集成到我的spring-webflow-jsf-richfaces应用程序中。 我在iframe中显示guvnor-editor(在richfaces-modalpanel内)。 根据文档,guvnor公开了一个javascript对象以及父应用程序进行通信的回调函数

    var guvnorEditorObject = {
    getDRL: function (callbackFunction),
    getBRL: function (callbackFunction),
    registerAfterSaveAndCloseButtonCallbackFunction: function (callbackFunction),
    registerAfterCancelButtonCallbackFunction: function (callbackFunction),
    getAssetsUUIDs: function()
}

现在我的问题是如何在jsf页面中注册这些回调函数? 例如,如果用户单击关闭按钮,我想关闭模式面板窗口。 示例代码对我很有帮助。

1 个答案:

答案 0 :(得分:1)

我已设法使用javascript setTimeout函数来解决此问题。

根本问题是guvnorEditorObject是动态创建的,因此无法立即加载iframe。

这是在加载iframe时调用的代码。

        function register() {
        var guvnorEditorObject = window.document.getElementById('myIframe').contentWindow.guvnorEditorObject;
        if(guvnorEditorObject){
            //guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);})
            //guvnorEditorObject.getBRL(function(brl){alert('brl: '+brl);})
            guvnorEditorObject.registerAfterSaveAndCloseButtonCallbackFunction(function(){guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);window.close();})});
            guvnorEditorObject.registerAfterCancelButtonCallbackFunction(function(){alert('Cancel button clicked');});              
            //alert(guvnorEditorObject.getAssetsUUIDs());       
        }else{
             setTimeout(register,250);
        }
    }