top.opener.location.reload(true)不刷新IE上的父页面

时间:2010-09-20 16:48:34

标签: javascript jquery

我有两个页面,父母和我正在使用的这个页面:

window.open('OrderDetailsFull.aspx?ObjectID=' + ObjectID[1] , "TableDetails","status=0 , toolbar=0 , location=no , menubar=0 , scrollbars=yes , height=600px , width=800px"); 

打开一个新窗口并在那里操作数据。

当我完成我正在做的事情时,我需要刷新父页面,这样我就可以获得新的数据...

据我所知,方法是:

top.opener.location.reload(true);

但出于某种原因,它无法在IE8或IE9中运行......

我正在构建一个应用程序,而不是一般的网页。它将适用于带有IE的Windows操作系统(目前它仍然是最常见的系统......无关紧要)所以我真的需要解决这个问题....

我在网上找不到任何针对这个问题的新解决方案,每个人都说它应该像那样......

有没有人遇到过这个问题?并且有人知道如何解决它吗?

好的,关注问题:我做opener.location.reload(true);时是否重新呈现父页面(听起来如此)?如果它确实那么我就是一个大问题,如果没有,那么必须有办法做到这一点......

问题是我在父页面中有一个ajax调用,并且由于某些原因它在我使用它时仍保留在它的旧值中,只有当我重新加载子窗口时,父ajax显示真实结果,一些代码如下...

这是在opener页面的文档就绪jQuery函数中:

$('div[id^="divTable"]').hover(
        function(e){
            //קבלת זהות השולחן הנלחץ
            ObjectID = $(this).attr('id').split('_');
            $(this).css("cursor","pointer");                
            //AJAX הבאת נתוני רשומת ההזמנה מהשרת ב
             var OrderDetails = $.ajax({
                    url:'AjaxActions/OrderDetails.aspx?ObjectID=' + ObjectID[1],
                    async:false                 
                }).responseText;
             //צף מעל שולחן כשעומדים עליו, ניתן לראות את פרטי הרשומה של אותו השולחן DIV
             $(this).append($('<div style="position: absolute; top: 0; left: -150;">' + OrderDetails + '</div>'));
             //וידוא שהשולחן עליו אנו עומדים יהיה העליון
             $(this).css("z-index","10");
             $(this).siblings().css("z-index","1");
        },   
        //כשיוצאים מהשולחן DIVהעלמת ה
        function () {
                  $(this).find('div:last').remove()
        }
    );

这是子窗口中应该刷新开启者的一个函数:

    $('#ctrl_Print').click(
        function()
        {
            alert($('#hidItem').val());
            var Items = new Array(); 
            Items = $('#hidItem').val().split(',');
            for(var i=0;i<Items.length;i++)
            {
                alert(Items[i]);
            }
            opener.location.reload(true);
            window.location = 'OrderDetailsFull.aspx?OrderID=' + OrderID + '&ObjectID=' + ObjectID + '&Print=' + Items;
            window.close();
        }
    );

... 10倍

4 个答案:

答案 0 :(得分:2)

看起来IE 8和9在刷新开启者时有安全限制。

答案 1 :(得分:1)

如果要访问父窗口(或框架),则应使用parent,而不是top

parent.location.reload(true);

如果您的网页是该窗口内的框架,请向其添加更多parent

parent.parent.location.reload(true);

答案 2 :(得分:1)

top用于在处理框架集和/或iframe时获取当前物理窗口中的最外层文档,并且与window.open无关,因此您不应该这样做除非您的弹出页面中有框架或iframe,否则请使用top。以下是:

opener.location.reload(true);

答案 3 :(得分:1)

我遇到过这个问题,其中reload()在Chrome中运行,但在IE浏览器中呕吐。

尝试使用window.location.replace(此处为url和params)。

你必须为replace()收集url和params,但它会解决IE错误消息。

示例:

在Joomla 2.5中,父窗口为用户输入启动模态,我们需要重新加载父窗口(视图)以运行使用模态输入的代码。

模态在父窗口中触发一个函数,如;

function updateAddresses(runUpdate, itemID, closeModal){
        if(closeModal == true ){
           SqueezeBox.close(); 
        }

        if(runUpdate == true){
           //location.reload(); 
           var replaceURL = 'index.php?option=com_poecom&view=cart&ItemId='+itemID;
           window.location.replace(replaceURL);
        }
    }