JavaScript: Переопределение предупреждения ()

Проверьте, собирается ли созданное изображение работать в ограниченном поле размера.

function check_size($font_size, $font, $text, $width, $height) {
        if (!is_string($text)) {
            throw new Exception('Invalid type for $text');
        }   
        $box = imagettfbbox($font_size, 0, $font, $text);
        $box['width'] = abs($box[2] - $box[0]);
        if ($box[0] < -1) {
            $box['width'] = abs($box[2]) + abs($box[0]) - 1;
        }   
        $box['height'] = abs($box[7]) - abs($box[1]);
        if ($box[3] > 0) {
            $box['height'] = abs($box[7] - abs($box[1])) - 1;
        }   
        return ($box['height'] < $height && $box['width'] < $width) ? array($font_size, $box['width'], $height) : $this->check_size($font_size - 1, $font, $text, $width, $height);
    }
206
задан cllpse 13 November 2009 в 04:55
поделиться

8 ответов

Определенно "поддерживается". Это ваша веб-страница, вы делаете с ней все, что хотите.

Я уже делал это, чтобы отслеживать события аналитики, не изменяя библиотеку, а скрываясь в событиях.

Используйте шаблон прокси:

(function(proxied) {
  window.alert = function() {
    // do something here
    return proxied.apply(this, arguments);
  };
})(window.alert);

Вы также можете обойти вызов исходной функции, если вы хотите (проксировать)

Подробнее здесь: Типы JQuery #Proxy Pattern

209
ответ дан 23 November 2019 в 04:50
поделиться

Я думаю, что каждая реализация Javascript будет поддерживать это, и в этом нет никакой опасности. Обычно это делается для замены простых окон предупреждений в стиле ОС на что-то более элегантное с HTML / CSS. Это означает, что вам не нужно изменять существующий код! Тот факт, что это возможно, делает Javascript потрясающим.

13
ответ дан 23 November 2019 в 04:50
поделиться

Мой опыт переопределения функции alert () показывает, что однажды мы использовали ее для «взлома» пробной версии библиотеки JavaScript, которая отображала «Пожалуйста, зарегистрируйтесь!»

Мы просто определили нашу собственную функцию alert () и вуаля.

Это было только для целей тестирования, мы купили полную версию позже, так что здесь ничего аморального не происходит; -)

4
ответ дан 23 November 2019 в 04:50
поделиться

Все реализации JavaScript в современных браузерах поддерживают переопределение.

Опасности довольно просты: вы можете свести с ума других членов команды, переопределив широко известные функции, такие как alert ().

Так что, если вы не переопределяете функции как инструмент для отладки или взлома существующего кода, я не вижу причин для этого. Просто создайте новую функцию.

3
ответ дан 23 November 2019 в 04:50
поделиться

Когда дело доходит до функций браузера js window.alert является выдающимся и наиболее известным, люди, которые не знают js, знают alert () - будьте уверены, он поддерживается всеми браузерами , которые используются сегодня , и ваш фрагмент кода тоже. Однако я бы не стал отменять (ну, это больше похоже на рефакторинг, а не на переопределение в смысле ООП) alert () для конкретного варианта использования, как у вас, потому что когда вам действительно нужно использовать alert ( ) без шаблона, и вы, вероятно, будете, тогда для этого вам понадобится другая функция без предупреждения.

0
ответ дан 23 November 2019 в 04:50
поделиться

Хотя большинство браузеров поддерживают его переопределение, будьте осторожны с тем, что вы с ним делаете.

Поскольку окно предупреждения по умолчанию блокирует поток выполнения, некоторые библиотеки, которые полагаются на это поведение, могут не работать больше (в лучшем случае).

Вы должны быть хорошим гражданином и не трогать собственный API. Если вы это сделаете, вы можете сломать ситуацию при использовании стороннего кода.

Тем не менее, если вы хотите переопределить поведение предупреждений в определенном контексте, вы можете заключить его в анонимную функцию, например:

/* new funky alert */
function myFunkyAlert(msg) { 
    /* here goes your funky alert implementation */
    alert("Look ma!\n" + msg);
}

(function(alert) { // anonymous function redefining the "alert"

    /* sample code */
    alert("Hello World!");

})(myFunkyAlert);
23
ответ дан 23 November 2019 в 04:50
поделиться

Он точно работает в firefox и ie8. Я не вижу, чтобы был какой-нибудь браузер, в котором он не работал бы. Это в значительной степени основа того, как работает javascript, хотя нечасто можно увидеть его использование с такими нативными функциями =)

2
ответ дан 23 November 2019 в 04:50
поделиться

В функции предупреждения о переопределении нет никаких опасностей. Каждый браузер поддерживает его.

например:

// function over riding. Redirecting to Console with Firebug installed.
function alert(message) { 
    console.info(message);
} 

alert('This is an override.');
15
ответ дан 23 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: