1

以下に示すように、子ウィンドウを開いて親ウィンドウを無効にし、子ウィンドウを閉じたら親を再度有効にしようとしているスクリプトがあります。

function OpenChild() {
lockOpportunity();
if (ClinicalDataWindow == null || ClinicalDataWindow.closed) {
    ClinicalDataWindow = window.open(clinicalDataUrl, 'EditOppClinicalData',   GetWindowOptions(1020, 600), true);
    var unloadFunc = function () { unlockOpportunity(); };
    if (ClinicalDataWindow) {     
        if (ClinicalDataWindow.addEventListener) {
            ClinicalDataWindow.addEventListener('unload', unloadFunc, false);
        }
        else {
            ClinicalDataWindow.attachEvent('onunload', unloadFunc); 
        }
             }
        }
else {
    ClinicalDataWindow.focus();
}
return false;
}


function lockOpportunity() {
$('#overlay').addClass('locking-overlay');
$('#overlay').height($(".t-edit-form-container").height());
$('#overlay').show();
}
function unlockOpportunity() {
$('#overlay').removeClass('locking-overlay');
$('#overlay').hide();
}

以下は、親をロックするためにオーバーレイに変換しているdivです

<div id="overlay" style="display:none;"></div>

およびCSS:

   .locking-overlay      
         {
            position: absolute;      
            width:930px;     
            @*height: 700px;*@
            z-index: 1000; 
            background-color: black;
            opacity: 0.5;
            filter: alpha(opacity=50);
        }

すべてが私のローカルマシンで完全に機能します。しかし、サーバーでこのコードを実行すると、スクリプトエラー「アクセスが拒否されました」エラーが発生します。子ウィンドウは同じドメインにあり、IIS7を使用しています。

編集: スクリプトコードは外部jsファイルにあります。

4

1 に答える 1

1

あなたのclinicalDataUrlは同一生成元ポリシーに従っていますか?つまり、任意のURLで新しいウィンドウを開くことができますが、それと対話するには、対話しようとする場所と同じドメイン、プロトコル、およびポートにいる必要があります。

編集:これが私の2番目のコメントの意味です

$(function(){
    $(window).on('unlockOpportunityEvent',unlockOpportunity);

});

function OpenChild() {
lockOpportunity();
var origin = window;
if (ClinicalDataWindow == null || ClinicalDataWindow.closed) {
    ClinicalDataWindow = window.open(clinicalDataUrl, 'EditOppClinicalData',   GetWindowOptions(1020, 600), true);
    var unloadFunc = function () { $(origin).trigger('unlockOpportunityEvent'); };
    if (ClinicalDataWindow) {     
        if (ClinicalDataWindow.addEventListener) {
            ClinicalDataWindow.addEventListener('unload', unloadFunc, false);
        }
        else {
            ClinicalDataWindow.attachEvent('onunload', unloadFunc); 
        }
             }
        }
else {
    ClinicalDataWindow.focus();
}
return false;
}


function lockOpportunity() {
$('#overlay').addClass('locking-overlay');
$('#overlay').height($(".t-edit-form-container").height());
$('#overlay').show();
}
function unlockOpportunity() {
$('#overlay').removeClass('locking-overlay');
$('#overlay').hide();
}
于 2012-08-13T12:53:53.603 に答える