2017-07-08 19 views
0

私はクリックすると開くウィンドウがあります。ウィンドウを開くと閉じません

function PopupManager() { 
this.name = "_popupmanager_"; 
this.windows = {}; 
}; 

PopupManager.prototype.open = function(url, option, size, name) { 
var url = "http://google.com" 
var option = "null, status=no, toolbar=no, menubar=no, titlebar=no, 
location=no, scrollbars=no, resizable=no" 
var size = 'height=200, width = 814' 
this.windows[name] = window.open(url, option, size, name); 
this.windows[name].focus(); 
}; 


PopupManager.prototype.closeAll = function() { 
for (name in this.windows) { 
    this.closeWindow(name); 
} 
} 


PopupManager.prototype.closeWindow = function(name) { 
if (this.windows[name]) { 
    if (!this.windows[name].closed) { 
     this.windows[name].opener.name="indexpage"; 
     this.windows[name].close(); 
    } 
    delete this.windows[name]; 
} 
}; 

//初期化

document.getElementById("popupManager").onclick = function (e) { 
e.preventDefault();  
var popupManager = new PopupManager(); 
popupManager.open('http://www.google.com', 'google'); 

} 

そして私は、同じウィンドウを閉じる必要があり、これを考えています。

document.getElementById("closeIt").onclick = function (e) { 
e.preventDefault(); 
var popupManager = new PopupManager(); 
popupManager.closeAll(); 
popupManger.closeWindow(); 

} 

コンソールエラーなし&何も起こりません。ただ閉じません。

私は同じ<を開こうとしていました& if else文を使ってウィンドウを閉じますが、私はそれを理解できませんでした。だから今私は別の2つの<を使用しようとしている>(はい、私はそれがダムだと知っている)閉鎖に&を開くために1つを開くが、私はそれを行うことはできません。

私がここで間違っていることを理解することさえできません。

ご協力いただければ幸いです。一口...

+0

同じ起源のウィンドウを開こうとして、結果を教えてください – Mouneer

+0

私は同じ起源のウィンドウを開いています。私はこの質問のためにgoogle.comに入れました。そのため、この質問は場所やそのようなものにあまりにも限定的ではありません。 – HackYa

+0

あなたはそれを開いた同じスクリプト内のウィンドウを閉じますか?または別のスクリプトからウィンドウ自体? – Mouneer

答えて

0

ウィンドウを保持する変数popupManagerの外に変数を定義するだけで、後でそれらを閉じてアクセスすることができます。

また、IIFEでラップしてクロージャを作成することもできます。

var windows = {}; 
 

 
function PopupManager() { 
 
    this.name = "_popupmanager_"; 
 
}; 
 

 
PopupManager.prototype.open = function(url, option, size, name) { 
 
    var url = "http://google.com" 
 
    var option = "null, status=no, toolbar=no, menubar=no, titlebar=no, location = no, scrollbars = no, resizable = no "; 
 
    var size = 'height=200, width = 814' 
 
    windows[name] = window.open(url, option, size, name); 
 
    windows[name].focus(); 
 
}; 
 

 

 
PopupManager.prototype.closeAll = function() { 
 
    for (name in windows) { 
 
    this.closeWindow(name); 
 
    } 
 
} 
 

 
PopupManager.prototype.closeWindow = function(name) { 
 
    if (windows[name]) { 
 
    if (!windows[name].closed) { 
 
     windows[name].opener.name = "indexpage"; 
 
     windows[name].close(); 
 
    } 
 
    delete windows[name]; 
 
    } 
 
}; 
 

 
document.getElementById("popupManager").onclick = function(e) { 
 
    e.preventDefault(); 
 
    var popupManager = new PopupManager(); 
 
    popupManager.open('http://www.google.com', 'google'); 
 

 
} 
 

 
document.getElementById("closeIt").onclick = function(e) { 
 
    e.preventDefault(); 
 
    var popupManager = new PopupManager(); 
 
    popupManager.closeAll(); 
 
    popupManager.closeWindow(); 
 

 
}
<button id="popupManager">Open</button> 
 
<br /> 
 
<button id="closeIt">Close</button>

別のオプションは、インスタンス間で同じ変数にアクセスを維持するために

PopupManager.prototype.windows = {}; 

を使用することです。

+0

ありがとう!!それは最初の場所で使用しようとしていたelse文の場合に有効です。 – HackYa

関連する問題