Besoin d'aide avec jquery / javascript script fenêtre pop-up - faire erreur étrange dans Internet Explorer

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

Question

Je suis en train de construire un script jquery qui ouvrira une nouvelle fenêtre du navigateur (fenêtre pop-up) pour un message comme l'application (l'utilisateur peut cliquer deux fois sur le courrier et ils vont ouvrir dans une nouvelle fenêtre).

Ce n'est pas particulièrement difficile. Mon problème est que je veux garder une trace des fenêtres ouvertes, de sorte que si un utilisateur double-clique sur le même article de courrier une deuxième fois, il mettra l'accent vient de mettre sur la fenêtre pop-up déjà ouvert, et non le recharger.

Je l'ai travailler dans Firefox, mais Internet Explorer renvoie l'erreur suivante:

Line: 51
Error: The interface is unknown.

En particulier, il se produit lorsque les utilisateurs ont fermé une fenêtre pop-up, puis double-cliquez sur l'article de courrier pour l'ouvrir à nouveau.

Mes javascript / compétences jquery sont rudimentaires au mieux, donc j'espère que quelqu'un ici peut aider. Voici le code pour le script.

(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);

La ligne de code qui me donne l'erreur est:

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

Merci, Egil.

Mise à jour: Transforme que c'est en fait une chose IE8, au moins la version dans la version bêta de Windows 7. Je mets en place une page de test ( http://egil.dk/popuptest/popup-source.htm ) et il semble fonctionner comme prévu dans de mes collègues IE7. Gah, le temps perdu!

Mise à jour 2: Je devrais probablement dire comment reproduire l'erreur. http://egil.dk/popuptest/popup-source.htm , cliquez sur un des liens, à savoir « quelque chose 1 », après la fin du chargement pop-up, onglet Retour à la fenêtre parent, puis cliquez sur le même lien à nouveau. Cette fois, la fenêtre contextuelle vient de recevoir le focus à nouveau, et pas recharger (ce qui est intentionnellement et ce que je veux). Maintenant, fermez la fenêtre, puis cliquez sur le même lien à nouveau. Cela produit l'erreur dans la version bêta IE8. Dans Firefox, il ouvre à nouveau correctement.

Était-ce utile?

La solution

La seule chose que j'ai remarqué est que vous avez une virgule supplémentaire après la barre de menus dans vos paramètres par défaut. Après avoir retiré cette dernière virgule il a bien fonctionné pour moi sur IE7. Quelle est la version si IE vous donne ce problème?

Autres conseils

Ce qui suit semble fonctionner pour moi. Si quelqu'un peut l'améliorer, s'il vous plaît faire!

Dans Firefox, la fenêtre contextuelle se concentrer juste si elle est ouverte. Dans IE8, l'erreur « interface est inconnue » est pris et la fenêtre est fermée et rouverte à la place. Dans tous les cas, la ligne window.open charge la page 'actuelle dans le menu contextuel.

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");
  }

J'ai eu problème avec IE 8 que window.open ne fonctionnait pas, je viens de remplacer le nom de la fenêtre avec null, je suis arrivé idée de http://msdn.microsoft.com/en-us/library/ms536651.aspx

window.open ( "Sample.htm", null,     "Height = 200, width = 400, status = oui, barre d'outils = non, = pas de barre de menu, emplacement = non");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top