2015-12-30 12 views
-1

У меня есть кусок кода, который открывает всплывающее окно, когда пользователь нажимает на экран. Проблема в том, что если вы нажмете еще раз, она не откроет другое всплывающее окно, оно просто «перезагрузит» уже открытое окно. Есть способ создать другой со вторым щелчком по экрану?Открыть полностью новое окно при нажатии на экран

Вот код:

function makePopunder(pUrl) { 
var _parent = (top != self && typeof (top["document"]["location"].toString()) === "string") ? top : self; 
var mypopunder = null; 
var pName = (Math["floor"]((Math["random"]() * 1000) + 1)); 
var pWidth = window["innerWidth"]; 
var pHeight = window["innerHeight"]; 
var pPosX = window["screenX"]; 
var pPosY = window["screenY"]; 
var pWait = 3600; 
pWait = (pWait * 1000); 
var pCap = 50000; 
var todayPops = 0; 
var cookie = "_.mypopunder"; 
var browser = function() { 
    var n = navigator["userAgent"]["toLowerCase"](); 
    var b = { 
     webkit: /webkit/ ["test"](n), 
     mozilla: (/mozilla/ ["test"](n)) && (!/(compatible|webkit)/ ["test"](n)), 
     chrome: /chrome/ ["test"](n), 
     msie: (/msie/ ["test"](n)) && (!/opera/ ["test"](n)), 
     firefox: /firefox/ ["test"](n), 
     safari: (/safari/ ["test"](n) && !(/chrome/ ["test"](n))), 
     opera: /opera/ ["test"](n) 
    }; 
    b["version"] = (b["safari"]) ? (n["match"](/.+(?:ri)[\/: ]([\d.]+)/) || [])[1] : (n["match"](/.+(?:ox|me|ra|ie)[\/: ]([\d.]+)/) || [])[1]; 
    return b; 
}(); 

function isCapped() { 
    try { 
     todayPops = Math["floor"](document["cookie"]["split"](cookie + "Cap=")[1]["split"](";")[0]); 
    } catch (err) {}; 
    return (pCap <= todayPops || document["cookie"]["indexOf"](cookie + "=") !== -1); 
}; 

function doPopunder(pUrl, pName, pWidth, pHeight, pPosX, pPosY) { 
    if (isCapped()) { 
     return; 
    }; 
    var sOptions = "toolbar=no,scrollbars=yes,location=yes,statusbar=yes,menubar=no,resizable=1,width=" + pWidth.toString() + ",height=" + pHeight.toString() + ",screenX=" + pPosX + ",screenY=" + pPosY; 
    document["onclick"] = function (e) { 
     if (isCapped() || window["pop_clicked"] == 1 || pop_isRightButtonClicked(e)) { 
      //return; 
     }; 
     window["pop_clicked"] = 1; 
     mypopunder = _parent["window"]["open"](pUrl, pName, sOptions); 
     if (mypopunder) { 
      var now = new Date(); 
      document["cookie"] = cookie + "=1;expires=" + new Date(now["setTime"](now["getTime"]() + pWait))["toGMTString"]() + ";path=/"; 
      now = new Date(); 
      document["cookie"] = cookie + "Cap=" + (todayPops + 1) + ";expires=" + new Date(now["setTime"](now["getTime"]() + (84600 * 1000)))["toGMTString"]() + ";path=/"; 
      pop2under(); 
     }; 
    }; 
}; 

function pop2under() { 
    try { 
     mypopunder["blur"](); 
     mypopunder["opener"]["window"]["focus"](); 
     window["self"]["window"]["blur"](); 
     window["focus"](); 
     if (browser["firefox"]) { 
      openCloseWindow(); 
     }; 
     if (browser["webkit"]) { 
      openCloseTab(); 
     }; 
    } catch (e) {}; 
}; 

function openCloseWindow() { 
    var ghost = window["open"]("about:blank"); 
    ghost["focus"](); 
    ghost["close"](); 
}; 

function openCloseTab() { 
    var ghost = document["createElement"]("a"); 
    ghost["href"] = "about:blank"; 
    ghost["target"] = "PopHelper"; 
    document["getElementsByTagName"]("body")[0]["appendChild"](ghost); 
    ghost["parentNode"]["removeChild"](ghost); 
    var clk = document["createEvent"]("MouseEvents"); 
    clk["initMouseEvent"]("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null); 
    ghost["dispatchEvent"](clk); 
    window["open"]("about:blank", "PopHelper")["close"](); 
}; 

function pop_isRightButtonClicked(e) { 
    var rightclick = false; 
    e = e || window["event"]; 
    if (e["which"]) { 
     rightclick = (e["which"] == 3); 
    } else { 
     if (e["button"]) { 
      rightclick = (e["button"] == 2); 
     }; 
    }; 
    return rightclick; 
}; 
if (isCapped()) { 
    return; 
} else { 
    doPopunder(pUrl, pName, pWidth, pHeight, pPosX, pPosY); 
}; 
} 
makePopunder('http://www.stackoverflow.com'); 
+1

Не могли бы вы сократить код на предметы первой необходимости, пожалуйста? Это много пуха. Кроме того, это может помочь вам решить проблему, заставив себя сократить код. – Mosselman

+0

Также пример jsfiddle был бы практичным. – Mosselman

+1

Любопытно, если у вас есть страх перед синтаксисом точки? Бывают случаи, когда вы не можете его использовать, но на самом деле. – PHPglue

ответ

2

Вы, кажется, выполнить команду «Open» с атрибутом именем, установленным. Это создает ссылку на это имя в окне, когда вы снова запустите эту команду с тем же окном, оно будет использовать окно, которое уже имеет эту ссылку. Решение было бы запустить open без name:

open(url, '', ...) 

Here is some documentation on open

+0

Это ответ. Пожалуйста, примите это. – PHPglue

+0

Спасибо, приятель, что сработало. –

+0

@MikeHoeks Glad Я мог бы помочь ... хотя это с кем-то, создающим всплывающие окна;). – Mosselman

Смежные вопросы