Je ne parviens pas à utiliser les fonctions de code natif en tant qu'objets JavaScript dans les navigateurs WebKit. Est-il impossible d'aliaser directement ces fonctions?Utilisation de fonctions de code natif en tant qu'objets JavaScript dans WebKit
Ceci est plus facile à expliquer par exemple, voici donc ce que je suis en cours d'exécution dans la console Outils de développement:
console.warn;
// Outputs:
// function warn() {
// [native code]
// }
console.warn("console.warn");
// Outputs: "console.warn"
var _c = console;
_c.warn("_c.warn");
// Outputs: "_c.warn"
var _w = console.warn;
_w("_w");
// Outputs: "TypeError: Type error" on Safari/WebKit (Mac)
// Outputs: "TypeError: Illegal invocation" on Chrome (Mac)
var _w2 = function() { console.warn.apply(console, arguments); }
_w2("_w2");
// Outputs: "w2"
Cette question a été soulevée comme je l'ai essayé d'utiliser jQuery Lint dans Safari; il utilise l'approche suivante pour éviter la rupture si window.console n'existe pas:
_console = {
warn: window.console && console.warn || function(){},
...
}
_console.warn("some error");
Voici mon solution temporaire:
if((jQuery.browser.safari || jQuery.browser.webkit) && window.console) {
jQuery.LINT.level = 3;
jQuery.LINT.console = {
warn: function() { console.warn.apply(console, arguments); },
group: function() { console.group.apply(console, arguments); },
groupEnd: function() { console.groupEnd(); },
groupCollapsed: function() { console.group.apply(console, arguments); },
log: function() { console.log.apply(console, arguments); }
}
}
Bizarrement, les nouvelles versions de Firebug ne vous dérange pas si vous alias les méthodes 'console'. – James
Eh bien d'accord, j'ai menti un peu. :-) Bien sûr, cela dépend de la mise en œuvre; il est naturellement possible de faire une fonction qui peut être rappelée sans se préoccuper de ce qu'est son «ceci», auquel cas aliaser la méthode dans une variable fonctionnera ... bien que ce ne soit clairement pas quelque chose sur lequel vous pouvez compter. (En outre, pour les 'objets hôtes' non natifs fournis par le navigateur, tous les paris sont désactivés.) – bobince