除非刷新页面,否则jQuery,replaceWith()在从iframe写入会话后无法正常工作

时间:2013-10-21 08:02:30

标签: javascript session iframe

我有一个在ajax调用之后动态重写div的函数

    function showPage(href){
    setTitle("",0);
    $.ajax({
        type: "POST",
        url: href,
        cache: false,
        success: function(html){
            rewriteContentDiv(html,isNotFade);
        }
    });
}


function rewriteContentDiv(html, href,  isNotFade) {
    var bodyObj;
    if($('#content-div').length !=0){bodyObj=document.body;}else{bodyObj=parent.document.body;}

    $('#content-div', bodyObj).fadeOut("slow", function () {
        var div = $('<div class="content" id="content-div">test2</div>').hide();
        div.html(html);
        $('#content-div', bodyObj).replaceWith(div);
        $('#content-div', bodyObj).fadeIn("slow");
        $('#content-div', bodyObj).find("a").click(function (e) { catchAnchorClick($(this), e) });
    });   
}

我从一个页面调用此函数并且它有效,除非有一个特定的情况: 当在“content-div”内部时,我有一个带有按钮的iframe,该按钮使用

将某些内容写入会话
function setObject(key,value){ 
       var session = window.sessionStorage;
       session.setItem(key, escape(JSON.stringify(value))); 
}

该对象确实被写入会话,但随后rewriteContentDiv函数开始失败

$('#content-div', bodyObj).replaceWith(div);

行,没有显示任何异常或让我进入jQuery函数 - 我在chrome 30.0.1599.101 m上调试。

如果我按“刷新” - 该功能再次开始工作,我在会话存储中看到了该对象。

为什么会这样做以及可以做些什么来阻止它呢?

我试图制作一个设置

的丑陋技巧
  

“window.location的=”

在有问题的情况下,

到自己的网址,但它没有帮助...

感谢。

1 个答案:

答案 0 :(得分:0)

再次检查代码,因为存在一些语法错误

function showPage (href){

    setTitle("",0);

    $.ajax({
        type: "POST",
        url: href,
        cache: false,
        success: function (html) {
            rewriteContentDiv(html, href, isNotFade);
        }
    });

}

function rewriteContentDiv (html, href,  isNotFade) {

    var bodyObj;
    if ($('#content-div').length > 0) {
       bodyObj = document.body;
    } else {
       bodyObj = parent.document.body;
    }

    $('#content-div', bodyObj).fadeOut("slow", function () {
        var div = $('<div class="content" id="content-div">test2</div>').hide();
        div.html(html);
        $('#content-div', bodyObj).replaceWith(div);
        $('#content-div', bodyObj).fadeIn("slow");
        $('#content-div', bodyObj).find("a").click(function (e) { 
            catchAnchorClick($(this), e) });
        });   

}