Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #24140
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | comp.lang.javascript |
| Subject | Re: intercept an alert |
| Date | 2014-05-12 13:30 +0200 |
| Organization | PointedEars Software (PES) |
| Message-ID | <2021642.a5K4omDOc0@PointedEars.de> (permalink) |
| References | <862dneogqrcsze3OnZ2dnUVZ_gCdnZ2d@westnet.com.au> <raKdnSsnnK2Ow-3OnZ2dnUVZ_sadnZ2d@westnet.com.au> <3910370.hJEAF5dPUy@PointedEars.de> <8761lb47e7.fsf@gmail.com> |
Simon Lewis wrote:
> Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:
>> Andrew Poulos wrote:
>>> if (!window._alert) {
>>> window._alert = window.alert;
>>> }
>>>
>>> window.alert = function(msg){
>>> if (msg.indexOf('is empty') != -1) {
>>> return false;
>>> } else {
>>> return window._alert.apply(this, arguments);
>>> }
>>> };
>>>
>>> Is this the way to go?
>>
>> Not quite. You should not augment the host object referred to by
>> “window” with an “_alert” property (modifying its “alert” property is bad
>> enough, but
>> I cannot see a better alternative here). Use a variable or a property of
>> your own object instead.
>
> Nonsense.
>
> It's perfectly fine to do that.
>
> People tag things on to "window" in each and every JS project.
People like you who are lacking the minimum clue (on host objects).
We have discussed this here ad nauseam: When you assign to a property of a
host object, there is no telling what may happen because you cannot know the
actual runtime environment (you can limit the runtime environments that you
support, but that will only move the problem to the future, when there will
be a new runtime environment that you did not consider; see jQuery as an
example for that not-recommended approach).
You can be lucky and the host object does not have a property of that name
*and* allows augmentation. But there are other possibilities to consider:
A. The host object does not have such a property and does not allow
augmentation.
a. The assignment fails silently. The .apply() call will fail
because “undefined has no properties”.
b. The assignment throws a recoverable exception. Result like
with (a) unless caught before.
c. The assignment throws an unrecoverable exception (fatal error).
The program stops at the assignment with an error.
MSHTML is known for either (b) or (c) when the property name
is that of an ID or name in the document.
B. The host object already has such property with that name.
a. to c. like with (A), only that for (Aa) there is the additional
possibility that the .apply() call may either do something
unintended because the property value is kept (and another method
is called), or that it fails because the still-unchanged property
value is not callable (it could be a primitive value or refer to
an object that does not implement [[Call]]).
d. Modifying the property is successful but causes an unintended
action because of a built-in setter, or it breaks some
other functionality that the host object provides.
Whereas “has a property” means “has an own property with that name or
inherits one with that name through the prototype chain” here.
Subjecting a property of a host object (or a host object itself) to
conversion to Boolean, particularly supposed-to-be methods, or using a
property of a host object in a type-converting test, as above, can be error-
prone, too. (MSHTML is known for that.)
See the ECMAScript Language Specification, 5.1 Edition, section 8.6.2, for
details.
--
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
intercept an alert Andrew Poulos <ap_prog@hotmail.com> - 2014-05-12 14:38 +1000
Re: intercept an alert Andrew Poulos <ap_prog@hotmail.com> - 2014-05-12 15:35 +1000
Re: intercept an alert Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-05-12 11:32 +0200
Re: intercept an alert Simon Lewis <simonlewis2001@gmail.com> - 2014-05-12 12:29 +0200
Re: intercept an alert Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-05-12 13:30 +0200
Re: intercept an alert "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2014-05-12 14:54 +0200
Re: intercept an alert "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2014-05-12 15:36 +0200
Re: intercept an alert Simon Lewis <simonlewis2001@gmail.com> - 2014-05-12 15:40 +0200
Re: intercept an alert Simon Lewis <simonlewis2001@gmail.com> - 2014-05-12 15:43 +0200
Re: intercept an alert "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2014-05-12 16:19 +0200
Re: intercept an alert Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-05-12 19:35 +0200
Re: intercept an alert garrett.smith@acxiom.com - 2014-05-14 09:57 -0700
Re: intercept an alert Dr J R Stockton <reply1400@merlyn.demon.co.uk.invalid> - 2014-05-13 18:00 +0100
Re: intercept an alert garrett.smith@acxiom.com - 2014-05-14 09:57 -0700
csiph-web