2015-08-06 1 views
4

Posté here est une réponse qui demande à ceux qui ratent l'ancienne fonction JavaScript window.showModalDialog pour utiliser leComment détecter si le navigateur prend en charge dialogue

<dialog> 
élément

à la place. J'ai utilisé ceci avec le polyfill nécessaire pour IE et FF et cela fonctionne. Cependant, il y a un décalage notable introduit lors de l'utilisation du polyfill que je voudrais éviter pour Chrome (sans oublier qu'il y a un avertissement de ne pas utiliser le polyfill lorsque les navigateurs le supportent). Comment puis-je détecter si l'élément de dialogue est pris en charge afin que je puisse ignorer le traitement de polyfill? Plus précisément ces lignes:

var dialog = document.getElementById('<element id>'); 
dialogPolyfill.registerDialog(dialog); 

Répondre

4

Vous pouvez écrire un test simple comme ceci:

if (typeof HTMLDialogElement === 'function') { 
 
    /** yep */ 
 
} else { 
 
    /** nope */ 
 
}

+1

Juste testé, fonctionne dans IE, FF et Chrome comme il est écrit. J'espère qu'il continuera à fonctionner lorsque les autres navigateurs commenceront à être mis à jour. – Ian

1

Essayez console.log(typeof window.showModalDialog === 'undefined')

if (typeof window.showModalDialog === 'undefined') { 
 
    console.log('No. '); 
 
} else { 
 
    console.log('Yes! '); 
 
}

+0

Techniquement, cela ne vérifierait que l'absence de showModalDialog. Il est concevable que les futurs navigateurs puissent ajouter un support pour l'élément de dialogue, mais conserver l'utilisation de showModalDialog (MS le ferait à coup sûr). – Ian

+0

J'ai testé dans Chrome, Firefox et IE. Il a donné la bonne réponse pour chacun. 1up – dlporter98

+0

@Ian D'accord, peut-être pas une solution de préfet ... – iplus26