検索
ホームページウェブフロントエンドjsチュートリアルjs innerHTML_javascript スキルに関するいくつかの問題の解決策

ただし、innerHTML には独自の問題がいくつかあることを知っておく必要があります。

1. HTML 文字列に defer としてマークされたスクリプト タグ (
) が含まれている場合、innerHTML 属性が適切に処理されない場合、 Internet Explorer に表示され、スクリプト インジェクション攻撃を引き起こします。
2. innerHTML を設定すると、イベント ハンドラーが登録されている既存の HTML 要素が破壊されるため、一部のブラウザーではメモリ リークの潜在的なリスクが発生する可能性があります。

他にも、言及する価値のある小さな欠点がいくつかあります。

1. 作成したばかりの要素への参照を取得できないため、それらの参照を取得するにはコードを手動で追加する必要があります (DOM を使用)。 API)。
2. すべてのブラウザーのすべての HTML 要素に innerHTML 属性を設定することはできません (たとえば、Internet Explorer では、テーブルの行要素に innerHTML 属性を設定できません)。
私は、innerHTML 属性の使用に関連するセキュリティとメモリの問題のほうが心配です。明らかに、これは新しい問題ではなく、これらの問題のいくつかについて解決策を見つけ出した才能ある人々がすでにいます。

Douglas Crockford は、HTML 要素登録イベント ハンドラーによって発生する一部の循環参照を解除し、ガベージ コレクター (ガベージ コレクター) がこれらの HTML 要素に関連付けられたメモリを解放できるようにするクリーンアップ関数を作成しました。
<script>…</script> HTML 文字列から script タグを削除するのは、見た目ほど簡単ではありません。正規表現は目的の効果を達成できますが、それがすべての可能性をカバーしているかどうかを知るのは困難です。これが私の解決策です:
/<script>]*>[Ss]*?</script>[^>]*>/ig
ここで、これら 2 つの手法を 1 つの setInnerHTML 関数に結合し、setInnerHTML 関数をバインドしましょう。 YUI の YAHOO.util.Dom:
YAHOO.util.Dom.setInnerHTML = function (el, html) {
el = YAHOO.util.Dom.get(el ); | typeof html !== 'string') {
return null;
}
// 循環参照を中止します
(function (o) {

var a = o.attributes , i, l, n, c;
if (a) {
l = a.length;
for (i = 0; i n = a [i].name; if (typeof o[n] === '関数') {
o[n] = null; > 0; i c = o.childNodes[i];

// 子ノードをクリアします
argument.callee(c); YUI を通じて要素上のすべてのリスナーを登録します。 addListener > // HTML 文字列からスクリプトを削除し、innerHTML 属性を設定します
el.innerHTML = html.replace(/
]*>[Ss]*?
]*>/ig, "" ; 式に不足がある場合はお知らせください。

明らかに、Web ページに悪意のあるコードを挿入する方法は他にもたくさんあります。 setInnerHTML 関数は、すべての A グレードのブラウザーでの
タグの実行動作のみを正規化します。信頼できない HTML コードを挿入する場合は、必ず最初にサーバー側でフィルタリングしてください。これを実行できるライブラリは数多くあります。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?Apr 04, 2025 pm 09:21 PM

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?Apr 04, 2025 pm 09:18 PM

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

TamperMonkeyで複数のリンクの同時GETリクエストを実装し、順番に戻る結果を決定する方法は?TamperMonkeyで複数のリンクの同時GETリクエストを実装し、順番に戻る結果を決定する方法は?Apr 04, 2025 pm 09:15 PM

複数のリンクの同時ゲットリクエストを作成し、結果を返すために順番に判断する方法は? TamperMonkeyスクリプトでは、複数のチェーンを使用する必要があることがよくあります...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。