让Firefox支持event对象实现代码_javascript技巧
通常为了兼容IE与FireFox,一般的事件处理方法为:
btn.onclick=handle_btn_click;
function handle_btn_click(evt){
if(evt==null)evt=window.event;//IE
//处理事件.
}
对于简单的程序,这不算麻烦.
但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.
下面介绍一个解决这个麻烦事的方法,与原理.
JScript中,函数的调用是有一个 func.caller 这个属性的.
例如
function A()
{
B();
}
function B()
{
alert(B.caller);
}
如果B被A调用,那么B.caller就是A
另外,函数有一个arguments属性. 这个属性可以遍历函数当前执行的参数:
function myalert()
{
var arr=[];
for(var i=0;i
alert(arr.join("-"));
}
myalert("hello","world",1,2,3)
就能显示 hello-world-1-2-3
(arguments的个数与调用方有关,而与函数的参数定义没有任何关系)
根据这两个属性,我们可以得到第一个函数的event对象:
btn.onclick=handle_click;
function handle_click()
{
showcontent();
}
function showcontent()
{
var evt=SearchEvent();
if(evt&&evt.shiftKey)//如果是基于事件的调用,并且shift被按下
window.open(global_helpurl);
else
location.href=global_helpurl;
}
function SearchEvent()
{
func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event) // 如果就是event 对象
return arg0;
}
func=func.caller;
}
return null;
}
这个例子使用了SearchEvent来搜索event对象. 其中 'Event' 是 FireFox 的 event.constructor .
在该例子运行时,
SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以 func=func.caller 时,func变为handle_click .
handle_click 被 FireFox 调用, 虽然没有定义参数,但是被调用时,第一个参数就是event,所以handle_click.arguments[0]就是event !
针对上面的知识,我们可以结合 prototype.__defineGetter__ 来实现 window.event 在 FireFox 下的实现:
下面给出一个简单的代码.. 有兴趣的可以补充(本人已经有修改)
javascript和JScript也是不相同的,前者是客户端的脚本,后者是服务端的脚本和VBScript一样被服务端所支持
当然我这里不是要说两者的区别,只是让自己了解到自己现在的水平(不是一般的差)...
如果就只给出了上面的代码,相信刚开始要搞兼容性的朋友一定很难看理解这些代码的用处
这里我就一一的解释下上面这些代码的用法吧
先看下__defineGetter__和__defineSetter__这两个方法的解释吧:
一.Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法。可以为任何预定义的核心对象或用户自定义对象定getter和setter方法,从而为现有的对象添加新的属性。
二.可以在什么时候对对象和事件添加新的属性?
1.在对象初始化时定义
2.在对象定义后通过Object的__defineGetter__、__defineSetter__方法来追加定义
详细的用法可以在请看这里对__defineGetter__、__defineSetter__的解释(地址:http://anbutu.javaeye.com/blog/post/194276)
所以我们看到了,在FixPrototypeForGecko()函数里分别给三个对象添加了属性,当然是在FF下对对象的添加:
HTMLElement添加了"runtimeStyle"属性,属性值为element_prototype_get_runtimeStyle函数的返回的值
window添加了"event"属性,属性值为window_prototype_get_event返回的值
Event添加了"srcElement"属性,基属性值为event_prototype_get_srcElement函数所返回的值
这样我们就为这三个对象在FF下扩展了新的属性
所以我们在判断浏览器是否为FF后执行FixPrototypeForGecko()过程,这个时候在FF下这三个对象的就有了新的属性
于是当我们点击DIV标签后在弹出的窗口中我们看到了"[object HTMLDivElement]"字样,也说明我们已经成功的为window对象添加了event属性
if(window.addEventListener) {
FixPrototypeForGecko();
alert(window.event.srcElement)
}
大家可以看到element_prototype_get_runtimeStyle过程和event_prototype_get_srcElement过程所以返回的值都能很容易理解
那下面我们来看看window_prototype_get_event()过程是怎么样返回事件的
过程的返回值是SearchEvent()过程的结果,看下这个过程
function SearchEvent()
{
//IE
if(document.all)
return window.event;
func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
//if(arg0.constructor==Event||arg0.constructor==MouseEvent)
if(arg0.constructor==Event||arg0.constructor==MouseEvent || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
return arg0;
}
func=func.caller;
}
return null;
}
要明白这个过程就得先明白两个方法:caller和arguments(在文章上面有相应的解释)
在这里再解释下constructor构造者这个属性,返回的是对象的相应对象的创建者
在while循环里alert(func)我们就可以看到func.caller的返回了,最后一次返回的就是我们的鼠标点击事件了
因为handle_click()过程是我们在点击div后执行的,所以最后的func.caller就是我们的点击事件了,这个时候的funcj就是 handle_click(),那么也就相当于是handle_click.caller,当然handle_click的调用者当然就是onclick 事件了,也就是[MouseEvent]
可以看到我在 if(arg0.constructor==Event||arg0.constructor==MouseEvent)增加了一个条件,是因为arg0.constructor现在的结果就是MouseEvent
看到这里相信大家也知道在FF下怎样编写event了
最后再说下"addEventListener"为对象注册事件方法
<script> <BR>function addObjectEvent(objId,eventName,eventFunc) <BR>{ <BR>var targetObj = document.getElementById(objId); <BR>if(targetObj) <BR>{ <BR>if(targetObj.attachEvent) <BR>{ <BR>targetObj.attachEvent(eventName,eventFunc); <BR>} <BR>else if(targetObj.addEventListener) <BR>{ <BR>eventName = eventName.toString().replace(/on(.*)/i,'$1'); <BR>targetObj.addEventListener(eventName,eventFunc,true); <BR>} <BR>} <BR>} <BR>function test1() <BR>{ <BR>alert('test1'); <BR>} <BR>function test2() <BR>{ <BR>alert('test2'); <BR>} <BR></script>
<script> <BR>addObjectEvent('hi','onclick',test1); <BR>addObjectEvent('hi','onclick',test2);//先执行test2(队列) <BR></script>

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Pour supprimer FirefoxSnap dans UbuntuLinux, vous pouvez suivre ces étapes : Ouvrez un terminal et connectez-vous à votre système Ubuntu en tant qu'administrateur. Exécutez la commande suivante pour désinstaller FirefoxSnap : sudosnapremovefirefox Vous serez invité à saisir votre mot de passe administrateur. Entrez votre mot de passe et appuyez sur Entrée pour confirmer. Attendez la fin de l’exécution de la commande. Une fois terminé, FirefoxSnap sera complètement supprimé. Notez que cela supprimera les versions de Firefox installées via le gestionnaire de packages Snap. Si vous avez installé une autre version de Firefox par d'autres moyens (tels que le gestionnaire de packages APT), vous ne serez pas affecté. Suivez les étapes ci-dessus

Mozilla Firefox peut être désinstallé ; Firefox est un navigateur tiers et peut être désinstallé s'il n'est pas nécessaire. Méthode de désinstallation : 1. Dans le menu Démarrer, cliquez sur « Système Windows » - « Panneau de configuration » 2. Dans l'interface « Panneau de configuration », cliquez sur « Programmes et fonctionnalités » 3. Dans la nouvelle interface, recherchez et double-cliquez ; Icône du navigateur Firefox ; 4. Dans la fenêtre contextuelle de désinstallation, cliquez sur « Suivant » ; 5. Cliquez sur « Désinstaller ».

Selon des informations récentes, alors que Mozilla a publié la version stable de Firefox 112, il a également annoncé que la prochaine version majeure, Firefox 113, est entrée dans le canal bêta et prend en charge les animations AV1, le générateur de mots de passe amélioré et les fonctionnalités d'image dans l'image. Les principales nouvelles fonctions/caractéristiques de Firefox 113 sont les suivantes : Prise en charge des images animées au format AV1 (AVIS) Améliorer la sécurité du générateur de mot de passe en introduisant des caractères spéciaux Améliorer la fonction image dans l'image, prendre en charge le rembobinage, afficher l'heure de la vidéo ; , et activez le plein écran plus facilement. Le mode fournit les fichiers d'installation DEB officiels pour les distributions Debian et Ubuntu. Fonctionnalité d'importation de signets mise à jour, les icônes pour les signets importés sont prises en charge par défaut. Le décodage vidéo AV1 accéléré par le matériel est activé par défaut sur le matériel pris en charge à l'aide de w.

Pour les robots d'exploration, explorer des sites Web qui nécessitent une connexion, un code de vérification ou une connexion par code de numérisation est un problème très gênant. Scrapy est un framework d'exploration très facile à utiliser en Python, mais lors du traitement des codes de vérification ou de la numérisation des codes QR pour se connecter, certaines mesures spéciales doivent être prises. En tant que navigateur courant, Mozilla Firefox propose une solution qui peut nous aider à résoudre ce problème. Le module principal de Scrapy est tordu et ne prend en charge que les requêtes asynchrones, mais certains sites Web nécessitent l'utilisation de cookies et

Dernières nouvelles d'aujourd'hui, Mozilla a officiellement publié aujourd'hui la mise à jour de la version stable du navigateur Firefox Firefox 115. La chose la plus remarquable à propos de cette mise à jour est qu'il s'agit de la dernière version prenant en charge Win7/Win8, macOS10.12, 10.13 et 10.14. Adresse de téléchargement : https://ftp.mozilla.org/pub/firefox/releases/115.0/Mozilla indiqué dans le journal de mise à jour officiel : Microsoft mettra fin au support des systèmes Win7 et Win8 en janvier 2023, et Firefox 115 est publié aujourd'hui. La version est la dernière mise à jour de version reçue par les utilisateurs dudit système. Utilisateurs Win7 et Win8

Canonical a récemment annoncé que dans la prochaine Ubuntu 23.10, Firefox Snap a été configuré pour s'exécuter par défaut en mode Wayland. Remarque : Ubuntu dispose actuellement de la session Wayland par défaut et Firefox peut également fonctionner normalement. Cependant, FirefoxSnap fonctionne actuellement en mode de compatibilité XWayland, plutôt qu'en mode Wayland natif strict. Canonical a annoncé qu'il exécuterait le navigateur Firefox en mode Wayland par défaut, afin que des problèmes tels que le flou de l'interface et la distorsion de mise à l'échelle ne se produisent pas sur les écrans HiDPI, et qu'il prendra en charge les gestes tactiles tels que le glisser et le pincer. Comme mentionné ci-dessus, Ubunt

Nouvelle nouvelle hier : alors que Mozilla a publié la mise à jour de la version stable de Firefox 114, il a également réorienté son développement vers la version Firefox 115 et a lancé la version bêta aujourd'hui. Il ressort des rapports que Firefox 115 introduit les boutons CookieBannerReduction et QuickActions qui devaient initialement être lancés dans la version 114. Une fois que les utilisateurs ont activé CookieBannerReduction dans Firefox version 115 et visité les sites Web pris en charge, le navigateur rejettera automatiquement les demandes de cookies sur les cookiesbanners. La deuxième fonctionnalité est le bouton QuickActions sur la barre d'adresse

Si vous souhaitez surfer sur Internet de manière plus fluide, vous avez besoin d'un navigateur facile à utiliser. Alors, quel navigateur est le meilleur sous Win10 ? L'éditeur ci-dessous recommande quelques navigateurs plus faciles à utiliser pour votre référence. 1. Google Chrome Ce navigateur peut être considéré comme encore plus puissant lorsqu'il est utilisé sur les systèmes Win10. Il est écrit sur la base d'autres logiciels open source, notamment Mozilla et Webkit, ce qui améliore considérablement la stabilité, la vitesse et la sécurité. Créez une interface simple et efficace. cela vous met à l’aise de l’utiliser. 2. QQ Browser QQ Browser est un navigateur très facile à utiliser et une nouvelle génération de navigateur, il sera donc très adapté au système win10. La nouvelle architecture adoptée a été entièrement optimisée pour le noyau ie.
