2009-02-09 36 views
21

Bir bağlantıyı tıklattığınızda yeni bir pencere açan bir uygulama var. Bu bir Java uygulaması tutan bir sayfa açar. Sorun şu ki, aynı bağlantıyı tıklamak, Java uygulamasını sıfırlayan sayfayı yeniden yüklemektir. Bunu yakalamanın bir yolu var mı? kabul edilebilir İki çözümler şunlardır:JavaScript window.open sadece pencere zaten mevcut değilse

  1. çoklu pencere tıklama işleyicisinden açılacak pencere zaten JavaScript acemi olduğu için

Özür açıksa

  • sonraki istekleri yok say izin ver - bu gerçekten benim ana şey değil.

    işleyicisi bağlı kod

    function launchApplication(l_url, l_windowName) 
    { 
        var l_width = screen.availWidth; 
        var l_height = screen.availHeight; 
    
        var l_params = 'status=1' + 
           ',resizable=1' + 
           ',scrollbars=1' + 
           ',width=' + l_width + 
           ',height=' + l_height + 
           ',left=0' + 
           ',top=0'; 
    
        winRef = window.open(l_url, l_windowName, l_params); 
        winRef.moveTo(0,0); 
        winRef.resizeTo(l_width, l_height); 
    } 
    

    DÜZENLEME geçerli: Cevaplar için

    teşekkürler - fonksiyonuyla açılan birden fazla URL olabilir biraz o yüzden önerileri güncellenmiştir.

    EDIT2: yeni pencereyi Açılan sayfada böyle bir şey kullanabilirsiniz Check for a URL open on another window

    var g_urlarray = []; 
    
    Array.prototype.has = function(value) { 
        var i; 
        for (var i in this) { 
         if (i === value) { 
          return true; 
         } 
        } 
        return false; 
    }; 
    
    
    function launchApplication(l_url, l_windowName) 
    { 
        var l_width = screen.availWidth; 
        var l_height = screen.availHeight; 
        var winRef; 
    
        var l_params = 'status=1' + 
           ',resizable=1' + 
           ',scrollbars=1' + 
           ',width=' + l_width + 
           ',height=' + l_height + 
           ',left=0' + 
         ',top=0'; 
        if (g_urlarray.has(l_url)) { 
        winRef = g_urlarray[l_url]; 
        } 
        alert(winRef); 
        if (winRef == null || winRef.closed) { 
         winRef = window.open(l_url, l_windowName, l_params); 
         winRef.moveTo(0,0); 
         winRef.resizeTo(l_width, l_height); 
         g_urlarray[l_url] = winRef; 
        } 
    } 
    
  • cevap

    19

    Böyle yapardım - basi Başvurulan tüm açılan pencereleri işlevin kendisinde saklayın. İşlev tetiklendiğinde, pencerenin mevcut olmadığını veya yakın olup olmadığını kontrol edin - böylece açılır pencereyi başlatın. Aksi takdirde, bu istek için mevcut pop-up penceresine odaklanın.

    function launchApplication(l_url, l_windowName) 
    { 
        if (typeof launchApplication.winRefs == 'undefined') 
        { 
        launchApplication.winRefs = {}; 
        } 
        if (typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed) 
        { 
        var l_width = screen.availWidth; 
        var l_height = screen.availHeight; 
    
        var l_params = 'status=1' + 
            ',resizable=1' + 
            ',scrollbars=1' + 
            ',width=' + l_width + 
            ',height=' + l_height + 
            ',left=0' + 
            ',top=0'; 
    
        launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params); 
        launchApplication.winRefs[l_windowName].moveTo(0,0); 
        launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height); 
        } else { 
        launchApplication.winRefs[l_windowName].focus() 
        } 
    } 
    
    +0

    Evet, ben böyle yapardım - daha düşük ayak izi, daha fazla tekrar, kendi kendine yeten +1 – annakata

    +3

    +1 harika çalışıyor.Bir şey olsa da, orijinal çek içinde 'winRefs' var ama sonra daha sonra 'winrefs' – Rondel

    5

    bu kodun başka bir sürümü var:

    var newWindow = null; 
    
    function launchApplication() 
    { 
        // open the new window only if newWindow is null (not opened yet) 
        // or if it was closed 
        if ((newWindow == null) || (newWindow.closed)) 
        newWindow = window.open(...); 
    } 
    
    +1

    Veya sadece (winref || winref.closed || winref.document!): If (! newWindow || newWindow.closed) –

    +0

    bu pencere açılmışsa ve aynı zamanda yeni URL – SCC

    2

    Böyle kontrol edebilir :

    if(!winref || winref.closed) 
    { 
    } 
    
    +0

    mümkün null işaretçi türü problemleri ile yüklenemedi – annakata

    +0

    @annakata - I * düşünün * null-pointer problemi yok, çünkü eğer '! Winref' true ise, o zaman IOR -' winref.closed' - ikinci kısmı asla kontrol edilmemelidir. Bu sana doğru geliyor mu? Yoksa yanlış mı öldüm? –

    20

    2 sınama gerçekleştirmeniz gerekir ... 1 açılır pencerenin tanımlandığını ve 2 kapalı olup olmadığını kontrol edin.

    if(typeof(winRef) == 'undefined' || winRef.closed){ 
        //create new 
        winRef = window.open(....); 
    } else { 
        //it exists, load new content (if necs.) 
        winRef.location.href = 'your new url'; 
        //give it focus (in case it got burried) 
        winRef.focus(); 
    } 
    
    +0

    çapraz tarayıcı – SCC

    +0

    olarak mükemmel bir çözüm olarak yanlış yazıyorsunuz Ama URL aynı olsa bile pencereyi yeniden yükler – SCC

    +0

    @ user2826057 kodda yorum - eğer aynı URL ise içeriği yeniden yüklemek istemezseniz, '(winRef.location.href! = myNewURL) {...} 'seçeneğini yalnızca eğer farklıysa yeniden test edebilirsiniz. – scunliffe

    0

    deneyin denetimi:

    eğer { }

    3

    Çalışma kod

    var newwindow = null; 
    function popitup(url) { 
        if ((newwindow == null) || (newwindow.closed)) { 
         newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes'); 
         newwindow.focus(); 
        } else { 
         newwindow.location.href = url; 
         newwindow.focus();  
        } 
    } 
    
    İlgili konular