WebKitベースのブラウザでネイティブコード関数をJavaScriptオブジェクトとして使用できません。これらの関数を直接エイリアスすることは不可能ですか?
これは例で説明するのが最も簡単なので、DeveloperToolsコンソールで実行しているものは次のとおりです。
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"
この問題は、SafariでjQueryLintを使用しようとしたときに発生しました。window.consoleが存在しない場合、破損を防ぐために次のアプローチを使用します。
_console = {
warn: window.console && console.warn || function(){},
...
}
_console.warn("some error");
これが私の一時的な回避策です:
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); }
}
}