Brauchen Sie Hilfe bei jquery / script JavaScript-Popup-Fenster - seltsame Fehler im Internet Explorer bekommen

StackOverflow https://stackoverflow.com/questions/507968

Frage

Ich versuche, einen Jquery-Skript zu erstellen, die ein neues Browserfenster (Popup-Fenster) für ein Mail-ähnliche Anwendung (Benutzer auf E-Mails klicken können verdoppeln und sie wird in einem neuen Fenster geöffnet) geöffnet werden.

Das ist nicht besonders schwer. Mein Problem ist, dass ich den Überblick über die geöffneten Fenster halten will, so dass, wenn ein Benutzer doppelklickt auf derselben Postsendung ein zweites Mal, wird es nur Fokus auf den bereits geöffneten Popup-Fenstern gesetzt und nicht neu zu laden.

Ich habe es in Firefox zu arbeiten, aber Internet Explorer gibt die folgenden Fehler:

Line: 51
Error: The interface is unknown.

Insbesondere ist es passiert, wenn die Benutzer ein Popup-Fenster geschlossen haben, und dann doppelklicken Sie auf dem Mail-Elemente, um es wieder zu öffnen.

Meine Javascript / jquery Fähigkeiten sind bestenfalls rudimentär, so dass ich hoffe, dass hier jemand helfen kann. Hier ist der Code für das Skript.

(function($)
{
    var _popupTracker = {}
    var _popupCounter = 0;
    $.fn.openPopupWindow = function(options)
    {
        var defaults = {
            height: 600, // sets the height in pixels of the window.
            width: 600, // sets the width in pixels of the window.
            toolbar: 0, // determines whether a toolbar (includes the forward and back buttons) is displayed {1 (YES) or 0 (NO)}.
            scrollbars: 0, // determines whether scrollbars appear on the window {1 (YES) or 0 (NO)}.
            status: 0, // whether a status line appears at the bottom of the window {1 (YES) or 0 (NO)}.
            resizable: 1, // whether the window can be resized {1 (YES) or 0 (NO)}. Can also be overloaded using resizable.
            left: 0, // left position when the window appears.
            top: 0, // top position when the window appears.
            center: 0, // should we center the window? {1 (YES) or 0 (NO)}. overrides top and left
            createnew: 0, // should we create a new window for each occurance {1 (YES) or 0 (NO)}.
            location: 0, // determines whether the address bar is displayed {1 (YES) or 0 (NO)}.
            menubar: 0 // determines whether the menu bar is displayed {1 (YES) or 0 (NO)}.
        };

        var options = $.extend(defaults, options);

        var obj = this;

        // center the window
        if (options.center == 1)
        {
            options.top = (screen.height - (options.height + 110)) / 2;
            options.left = (screen.width - options.width) / 2;
        }

        var parameters = "location=" + options.location +
                         ",menubar=" + options.menubar +
                         ",height=" + options.height +
                         ",width=" + options.width +
                         ",toolbar=" + options.toolbar +
                         ",scrollbars=" + options.scrollbars +
                         ",status=" + options.status +
                         ",resizable=" + options.resizable +
                         ",left=" + options.left +
                         ",screenX=" + options.left +
                         ",top=" + options.top +
                         ",screenY=" + options.top;

        // target url
        var target = obj.attr("href");       

        // test if popup window is already open, if it is, just give it fokus.        
        var popup = _popupTracker[target];
        if (options.createnew == 0 && popup !== undefined && !popup.closed)
        {            
            popup.focus();
        } 
        else
        {
            var name = "PopupWindow" + _popupCounter;
            _popupCounter++;

            // open window
            popup = window.open(target, name, parameters);            
            _popupTracker[target] = popup;
            _popupTracker[target].focus();
        }

        return false;
    };        
})(jQuery);

Die Codezeile, die mir den Fehler gibt, ist:

if (options.createnew == 0 && popup !== undefined && !popup.closed)

Danke, Egil.

UPDATE: Es stellte sich heraus, dass dies in der Tat eine IE8 Sache, zumindest die Version in der Windows 7 Beta. Ich habe auf eine Testseite ( http://egil.dk/popuptest/popup-source.htm ) und es scheint, in meinen Kollegen IE7 wie erwartet zu funktionieren. Gah, verschwendete Zeit!

UPDATE 2: Ich soll wahrscheinlich sagen, wie der Fehler zu reproduzieren. Zum http://egil.dk/popuptest/popup-source.htm , klicken Sie auf einen der Links, also „etwas 1“, nachdem das Popup fertig geladen, Tab zurück zu übergeordneten Fenster, und klicken Sie dann auf dem gleichen Link wieder. Dieses Mal wird das Popup-Fenster erhalten nur Fokus wieder, und legen Sie NICHT (das ist absichtlich und was ich will). Nun die Popup-Fenster schließen, und klicken Sie dann auf dem gleichen Link wieder. Dies erzeugt den Fehler in der IE8 Beta. In Firefox wieder öffnet es richtig.

War es hilfreich?

Lösung

Das einzige, was mir aufgefallen ist, dass Sie ein zusätzliches Komma nach menubar in Ihren Vorgaben haben. Nachdem das letzte Komma Entfernung für mich funktionierte gut auf IE7. Welche Version, wenn IE ist dieses Problem geben?

Andere Tipps

Die folgende scheint für mich zu arbeiten. Wenn jemand es verbessern können, bitte!

In Firefox wird das Popup nur konzentrieren, wenn es geöffnet ist. In IE8 „ist Schnittstelle unbekannt“ der Fehler abgefangen wird und das Popup wird geschlossen und stattdessen wieder eröffnet. In allen Fällen lädt die window.open Linie die aktuelle ‚Seite‘ in das Popup.

var bigimg;  // set this variable outside the function so the first time 
             // the popup opens, bigimg is a defined variable and the if's don't choke.

function popupbigpic(page) 
  {
  try
    {
    if(window.focus && bigimg) bigimg.focus(); 
    }
  catch(err)
    {
    if(bigimg) bigimg.close();
    }
  bigimg = window.open(page,"popup","width=670,height=665,toolbar=no");
  }

Ich hatte Problem mit IE 8, die window.open nicht funktionierte, habe ich den Fensternamen mit null nur ersetzt, bekam ich Idee von http://msdn.microsoft.com/en-us/library/ms536651.aspx

window.open ( "Sample.htm", null,     "Height = 200, width = 400, status = yes, toolbar = no, menubar = nein, location = no");

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top