ホームページ ウェブフロントエンド jsチュートリアル Firefox にイベント オブジェクト実装 code_javascript スキルをサポートさせよう

Firefox にイベント オブジェクト実装 code_javascript スキルをサポートさせよう

May 16, 2016 pm 06:42 PM
firefox

通常、IE および FireFox と互換性を持たせるために、一般的なイベント処理メソッドは次のとおりです。

コードをコピー コードは次のとおりです。

btn.onclick=handle_btn_click;
function handle_btn_click(evt){
if(evt==null)evt=window.event;//IE
// イベントを処理します.
}

単純なプログラムの場合、これは問題ありません。
一部の複雑なプログラムでは、特定の関数を渡したい場合があります。
次は、この問題を解決するための方法と原則です。
JScript では、関数呼び出しには func.caller という属性があります。
たとえば、
コードをコピーします コードは次のとおりです:

function A()
{
B();
}
function B()
{
alert(B.caller)
}

B が A の場合、 B.caller は A
さらに、この関数には argument 属性があり、この属性は関数の現在の実行のパラメーターをトラバースできます:
コードをコピー コードは次のとおりです。

function myalert()
{
var arr=[];
for(var i=0; iarr[i]=myalert.arguments[i];
alert(arr.join("-")); hello","world ",1,2,3)


は hello-world-1-2-3
を表示します (引数の数は呼び出し元に関連しており、何もありません)関係)
これら 2 つの属性に従って、最初の関数のイベント オブジェクトを取得できます:


btn.onclick=handle_click;
function handle_click()
{
showcontent(); }
function showcontent()
{
var evt=SearchEvent();
if(evt&&evt.shiftKey)//イベントベースの呼び出しで、Shift キーが押された場合は、
ウィンドウ。 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) // イベントオブジェクトの場合
return arg0;
}
func= func.caller;
}


この例では、SearchEvent を使用してイベントを検索します
この例を実行すると、
SearchEvent.caller は showcontent ですが、showcontent.arguments[0] は空になります。つまり、func=func.caller の場合、func になります。 handle_click.
handle_click は FireFox によって呼び出されますが、パラメータは定義されていませんが、呼び出されるときの最初のパラメータはイベントなので、handle_click.arguments[0] はイベントです。
上記の知識に基づいて、次のように組み合わせることができます。 FireFox で window.event を実装するためのprototype.__defineGetter__:
興味がある場合は、それを追加できます (既に変更しています)




コードをコピーします

コードは次のとおりです:
ここをクリックしてください!!

JavaScript と JScript も異なります。前者はクライアント側のスクリプトであり、後者は VBScript と同様にサーバーによってサポートされます。
もちろん、私はここでそれについて話すつもりはありません。 2 つの違いですが、私の現在のレベル (平均ではありません) をお知らせします。
上記のコードだけを説明すると、互換性に取り組み始めたばかりの友人は難しいと思うでしょう。これらのコードの使用法を理解するには
ここで説明します まず上記のコードの使用法を説明しましょう
まず 2 つのメソッド __defineGetter__ と __defineSetter__ の説明を見てみましょう:
1. Getter はメソッドですSetter は属性の値を取得するメソッドであり、Setter はプロパティの値を設定するメソッドです。事前定義されたコア オブジェクトまたはユーザー定義オブジェクトに対してゲッター メソッドとセッター メソッドを定義できるため、既存のオブジェクトに新しいプロパティを追加できます。
2. 新しい属性はいつオブジェクトやイベントに追加できますか?
1. オブジェクトの初期化時に定義します
2. オブジェクトの __defineGetter__ メソッドと __defineSetter__ メソッドを使用して定義を追加します
詳細な使用法については、__defineGetter__ と __defineSetter__ の説明をここで参照してください (アドレス: http://anbutu.javaeye.com/blog/post/194276)
FixPrototypeForGecko() 関数で属性が追加されることがわかりました。それぞれ 3 つのオブジェクトです。もちろん、オブジェクトは FF の下に追加されます。
HTMLElement は "runtimeStyle" 属性を追加します。属性値は element_prototype_get_runtimeStyle 関数によって返される値です。
window は "event" 属性を追加します。 value は、window_prototype_get_event によって返される値です
イベントは「srcElement」属性を追加し、基本属性値は、event_prototype_get_srcElement 関数によって返される値です
このようにして、FFそこで、ブラウザが FF かどうかを判断した後、FixPrototypeForGecko() 処理を実行します。このとき、これら 3 つのオブジェクトは FF の下に新しい属性を持っています。
DIV タグをクリックすると、ポップアップ ウィンドウに が表示されます。 「[object HTMLDivElement]」という単語に到達すると、ウィンドウ オブジェクトにイベント属性が正常に追加されたことも意味します

コードをコピー コードは次のとおりです:
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;呼び出し元;
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
}


このプロセスを理解するには、まず、呼び出し元と引数の 2 つのメソッドを理解する必要があります (記事内に対応する説明があります)
ここで、コンストラクター属性について再度説明します。返されるのは、オブジェクトの対応するオブジェクトの作成者です。
そのうち。ループ、アラート(func) 最後の戻りである func.caller の戻りがわかります。 これはマウス クリック イベントです
div をクリックした後に handle_click() プロセスが実行されるため、最終的な func.caller は次のようになります。このとき、funcj は handle_click() なので、 handle_click.caller はもちろん、handle_click の呼び出し元は [MouseEvent] である onclick イベントです。
を追加したことがわかります。 if(arg0.constructor==Event||arg0.constructor==MouseEvent) の条件。arg0.constructor の現在の結果は MouseEvent なので
これを見れば、誰もが FF でイベントを記述する方法を知っていると思います
最後に、オブジェクトのイベント メソッドを登録する「addEventListener」について説明します


コードをコピー コードは次のとおりです:

<スクリプト>
function addObjectEvent(objId,eventName,eventFunc)
{
var targetObj = document.getElementById(objId);
if(targetObj)
{
if(targetObj.attachEvent)
{
targetObj.attachEvent(eventName,eventFunc);
}
else if(targetObj.addEventListener)
{
eventName =eventName.toString().replace(/on(.*)/i,'$1');
targetObj.addEventListener(eventName,eventFunc,true);
}
}
}
function test1()
{
alert('test1');
}
関数 test2()
{
alert('test2');
}

on click


addObjectEvent('hi','onclick',test1);
addObjectEvent('hi','onclick',test2);//先执実行test2(队列)

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu LinuxでFirefox Snapを削除するにはどうすればよいですか? Ubuntu LinuxでFirefox Snapを削除するにはどうすればよいですか? Feb 21, 2024 pm 07:00 PM

Ubuntu Linux で FirefoxSnap を削除するには、次の手順に従います。 ターミナルを開き、管理者として Ubuntu システムにログインします。次のコマンドを実行して FirefoxSnap をアンインストールします: sudosnapremovefirefox 管理者パスワードの入力を求められます。パスワードを入力し、Enter キーを押して確認します。コマンドの実行が完了するまで待ちます。完了すると、FirefoxSnap は完全に削除されます。これにより、Snap パッケージ マネージャー経由でインストールされた Firefox のバージョンが削除されることに注意してください。他の方法 (APT パッケージ マネージャーなど) を通じて別のバージョンの Firefox をインストールした場合は、影響を受けません。上記の手順を実行します

mozilla Firefox はアンインストールできますか? mozilla Firefox はアンインストールできますか? Mar 15, 2023 pm 04:40 PM

Mozilla Firefox はアンインストールできます。Firefox はサードパーティのブラウザなので、不要な場合はアンインストールできます。アンインストール方法: 1. [スタート] メニューで、[Windwos システム] - [コントロール パネル] をクリックします; 2. [コントロール パネル] インターフェイスで、[プログラムと機能] をクリックします; 3. 新しいインターフェイスで、[プログラムと機能] をクリックします。 Firefox ブラウザ アイコン; 4. アンインストール ポップアップ ウィンドウで、[次へ] をクリックします; 5. [アンインストール] をクリックします。

Firefox 113 の新機能: AV1 アニメーションのサポート、強化されたパスワード ジェネレーターおよびピクチャ イン ピクチャ機能 Firefox 113 の新機能: AV1 アニメーションのサポート、強化されたパスワード ジェネレーターおよびピクチャ イン ピクチャ機能 Mar 05, 2024 pm 05:20 PM

最近のニュースによると、Mozilla は Firefox 112 の安定版をリリースしましたが、次のメジャー バージョンである Firefox 113 がベータ チャネルに入り、AV1 アニメーション、強化されたパスワード ジェネレーター、およびピクチャ イン ピクチャ機能をサポートすることも発表しました。 Firefox 113の主な新機能・特徴は以下の通り:AV1形式のアニメーション画像(AVIS)のサポート、特殊文字の導入によるパスワード生成機能のセキュリティ強化、ピクチャーインピクチャー機能の強化、巻き戻しのサポート、ビデオ時間の表示モードでは、Debian および Ubuntu ディストリビューション用の公式 DEB インストール ファイルが提供されます。ブックマーク インポート機能が更新され、インポートされたブックマークのアイコンがデフォルトでサポートされます。サポートされているハードウェアでは、w を使用してハードウェア アクセラレーションによる AV1 ビデオ デコードがデフォルトで有効になります。

Scrapy で Mozilla Firefox を使用して、QR コードをスキャンしてログインする問題を解決するにはどうすればよいですか? Scrapy で Mozilla Firefox を使用して、QR コードをスキャンしてログインする問題を解決するにはどうすればよいですか? Jun 22, 2023 pm 09:50 PM

ログイン、検証コード、またはスキャンコードによるログインが必要な Web サイトをクロールするクローラーにとって、非常に厄介な問題です。 Scrapy は Python の非常に使いやすいクローラー フレームワークですが、認証コードを処理したり、QR コードをスキャンしてログインしたりする場合は、いくつかの特別な措置を講じる必要があります。 Mozilla Firefox は一般的なブラウザとして、この問題の解決に役立つソリューションを提供します。 Scrapy のコア モジュールは複雑で、非同期リクエストのみをサポートしますが、一部の Web サイトでは Cookie と

Firefox ブラウザ Firefox 115 リリース、Win7/Win8.1 の最終バージョンをサポート Firefox ブラウザ Firefox 115 リリース、Win7/Win8.1 の最終バージョンをサポート Mar 04, 2024 pm 04:46 PM

本日の最新ニュースは、Mozilla が本日 Firefox 115 安定版アップデートを正式リリースしました このアップデートで最も注目すべき点は、これが Win7/Win8、macOS10.12、10.13、10.14 をサポートする最後のバージョンであるということです。ダウンロード アドレス: https://ftp.mozilla.org/pub/firefox/releases/115.0/Mozilla の公式アップデート ログには次のように記載されています: Microsoft は 2023 年 1 月に Win7 および Win8 システムのサポートを終了し、Firefox 115 は本日リリースされます。バージョンは前記システムのユーザーが受信した最後のバージョン更新。 Win7およびWin8ユーザー

Ubuntu 23.10 はデフォルトで Firefox をネイティブ Wayland モードで実行します Ubuntu 23.10 はデフォルトで Firefox をネイティブ Wayland モードで実行します Feb 29, 2024 am 10:10 AM

Canonical は最近、次期 Ubuntu 23.10 で Firefox Snap がデフォルトで Wayland モードで実行されるように構成されたことを発表しました。注: 現在、Ubuntu にはデフォルトで Wayland セッションがあり、Firefox も通常どおりに動作します。ただし、現在 FirefoxSnap は実際には、厳密なネイティブ Wayland モードではなく、XWayland 互換モードで実行されます。 Canonical は、HiDPI ディスプレイ上でインターフェイスのぼやけやスケーリングの歪みなどの問題が発生しないように、デフォルトで Firefox ブラウザを Wayland モードで実行し、ドラッグやピンチなどのタッチ ジェスチャをサポートすると発表しました。上でも述べたように、Ubunt

Firefox 115 ベータ版がリリース: クイック アクションの導入 Firefox 115 ベータ版がリリース: クイック アクションの導入 Mar 04, 2024 pm 03:10 PM

昨日の新しいニュース: Mozilla は Firefox 114 安定版アップデートをリリースしましたが、同時に開発の焦点を Firefox 115 バージョンに移し、本日ベータ版を開始しました。 Firefox 115では、当初バージョン114で導入される予定だったCookieBannerReductionとQuickActionsボタンが導入されていることが報道から判明した。ユーザーが Firefox バージョン 115 で CookieBannerReduction を有効にし、サポートされている Web サイトにアクセスすると、ブラウザーは CookieBanner での Cookie リクエストを自動的に拒否します。 2 番目の機能は、アドレス バーの QuickActions ボタンです。

Windows 10 に最適なブラウザは何ですか? Windows 10 に最適なブラウザは何ですか? Jul 11, 2023 pm 05:09 PM

よりスムーズにインターネットを閲覧したい場合は、使いやすいブラウザが必要ですが、Win10 ではどのブラウザが適しているのでしょうか?以下のエディタでは、参考として、使いやすいブラウザをいくつか推奨しています。 1. Google Chrome このブラウザは、win10 システムで使用するとさらに強力であると言えます。Mozilla や Webkit を含む他のオープン ソース ソフトウェアに基づいて書かれており、安定性、速度、セキュリティが大幅に向上しています。シンプルかつ効率的なブラウザを作成します。快適に使えるインターフェイス。 2. QQ ブラウザ QQ ブラウザは非常に使いやすいブラウザであり、IE カーネル用に完全に最適化された新しいアーキテクチャが採用されており、win10 システムに最適な新世代のブラウザです。

See all articles