0

ブックマークレットを作成しました。これには、2つのdiv(iframeのオーバーレイとdiv)とiframeが含まれます。このiframeでは、誰かがそのURLから画像を取得してデータベースに保存できるように、ページを読み込みます。写真を保存したら、ブックマークレットを閉じてほしい。

私のブックマークレットjs:

 (function(){

var v = "1.3.2";

if (window.jQuery === undefined || window.jQuery.fn.jquery < v) {
    var done = false;
    var script = document.createElement("script");
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + v + "/jquery.min.js";
    script.onload = script.onreadystatechange = function(){
        if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
            done = true;
            initMyBookmarklet();
        }
    };
    document.getElementsByTagName("head")[0].appendChild(script);
} else {
    initMyBookmarklet();
}

function initMyBookmarklet() {
    (window.myBookmarklet = function() {

        if ($("#wikiframe").length == 0) {
            var s = window.location.href;
            if ((s != "") && (s != null)) {
                $("body").append("\
                <div id='wikiframe'>\
                    <div id='wikiframe_veil' style=''></div>\
                    <iframe src='http://test.itemmized.com/iframe.php?&search="+s+"' onload=\"$('#wikiframe iframe').slideDown(500);\" scrolling='no'>Enable iFrames.</iframe>\
                    <style type='text/css'>\
 #wikiframe_veil { display: none; position: fixed; width: 100%; height: 100%; top: 0; left: 0; background:url('http://www.itemmized.com/img/popup/overlay.png') repeat 0 0; cursor: pointer; z-index: 9999; }\
                        #wikiframe iframe { display: none; position: fixed; top: 30px; right: 30px; overflow:hidden; width: 472px; height: 412px; z-index: 99999; background:#FFF; border: 5px solid rgba(0,0,0,.5); margin: -5px 0 0 -5px; }\
                    </style>\
                </div>");
                $("#wikiframe_veil").fadeIn(750);
            }
        } else {
            $("#wikiframe_veil").fadeOut(750);
            $("#wikiframe iframe").slideUp(500);
            setTimeout("$('#wikiframe').remove()", 750);
        }
        $("#wikiframe_veil").click(function(event){
            $("#wikiframe_veil").fadeOut(750);
            $("#wikiframe iframe").slideUp(500);
            setTimeout("$('#wikiframe').remove()", 750);
        });
    })();
}

 })();

iframe内でのajax呼び出し後の関数:

 function myresult1(result) {
var result_lines = result.split("<splitter>");    
if (result_lines[0] == '1') { 
    $("#loading").html('<img src="../img/common/loader.gif"/>').fadeOut(250);
    $('#content_error').html(result_lines[1]).fadeIn(250);
    $('#content_error').delay(1500).fadeOut(500);
} else if (result_lines[0] == '2') { 
    $("#loading").html('<img src="../img/common/loader.gif"/>').fadeOut(250);
    $('#content_success').html(result_lines[1]).fadeIn(250);
    $('#content_success').delay(1500).fadeOut(500);
    $('#form_url').attr('value', '');
    $('#url_result').delay(500).fadeOut(500);
}
return true;   

そのため、ajax呼び出しの後に関数が呼び出されたときに、2つのdiv(iframeを含む)を閉じたいと思います。jqueryでこれを行うにはどうすればよいですか?

4

1 に答える 1

1

windows.top.postMessageを使用して解決しました:

これをbookmarklet.jsに追加しました:

            var receiveMessage = function(event) {
            if ("close-iframe" == event.data) {
                $("#wikiframe_veil").fadeOut(750);
                $("#wikiframe iframe").slideUp(500);
                setTimeout("$('#wikiframe').remove()", 750);
            }
        }
        window.addEventListener("message", receiveMessage, false);

そしてこれをiframeに:

            setTimeout(function() { window.top.postMessage("close-iframe", "*");}, 2500);
于 2012-12-29T07:20:35.470 に答える