ホームページ  >  記事  >  ウェブフロントエンド  >  Ajax、UTF-8、GB2312 eval または execScript_javascript 手法

Ajax、UTF-8、GB2312 eval または execScript_javascript 手法

WBOY
WBOYオリジナル
2016-05-16 18:58:43926ブラウズ

2 つの質問:
最初の質問:
xmlhttp の responseText はデフォルトで常に utf-8 でエンコードされます。少し前に、この問題を最小限のコストで解決するために、プロジェクト全体が単純に utf-8 でエンコードされました。 8.オンライン上には解決策があまりなく、どれも非常に煩雑で、私はそれが好きではありません。今後、すべてに utf-8 を使用することはできなくなります。
2 番目の質問:
xmlhttp 読み込みページの JavaScript スクリプトを実行できません。イベント ドライバーはまだ利用できますが、少し前にこの問題を回避するために、スクリプト全体を一緒に作成しました。数百キロの js ファイルをロードするたびにこれを行うのはうんざりです。

それでは、時間があるので、最もオーソドックスな方法で解決してみます。
xmlhttp は、本来 xml を操作するために使用されます。responseText で返されるものを、バイナリのハードコーディングを使用して UTF-8 に変更します。 GB2312 にエンコードする方法は当然信頼性が低く、他のエンコードを扱う場合は何もできません。 responseXML が返す IXMLHTTPRequest オブジェクトは xml のエンコード宣言に依存しているため、当然文字化けすることはありません。使わない理由はありません。


ここに必要な HTML テキストがあります。
]]>

スクリプトは次のことができます。次のようになります。
returnValue = xmldom.documentElement.text;
returnValue は、バイト ストリームを使用してエンコーディングを変更するのは比較的厳密です。
最初の質問は、utf-8、gb2315.gbk、または 8859-1 のいずれのエンコーディングを使用しても、ドキュメントのステートメントを変更するだけで基本的に解決されます。
最初の問題は XML を使用しているため、2 番目の問題も簡単に解決できます。ニーズを分析し、ページのスクリプトを実行するだけです。これは通常、ロードされるページの宣言の 2 か所にあります。 HTML と読み込み完了時の呼び出し。ページ内での使用に関しては、DHTML イベントによって駆動され、XML の構造を変更できます。




// ここでのスクリプトは head 内に記述されるのと同じです。 🎜> ]]>



HtmlCode ]]>



// ここでのスクリプトは、]]>


スクリプトを処理するには、次の行を記述してみてください。
BeginScript = xmldom.documentElement.selectSingleNode("onStart").text;
htmlCode = xmldom.documentElement.selectSingleNode("body") ;
endScript = xmldom.documentElement.selectSingleNode("onEnd").text;
IE では問題ないようですが、Firefox ではエラーが報告されます。 selectSingleNode メソッドはブラウザ識別メソッドでは機能しません。これを任意の場所にコピーするだけです。ここでは、私のマシンにある 2 つのみである IE と Firefox だけを気にし、コードを変更します。
以下の最初の 3 行は NetEase ブログからコピーしたものです。ご質問がございましたら、NetEase までお問い合わせください。自分で書くのがめんどくさいし、ましてやネットで検索してもらうのも面倒です。
var isIE=(document.all&&document.getElementById&&!window.opera)?true:false;
var isMozilla=(!document.all&&document.getElementById&&!window.opera)?true:false; =(window.opera)?true:false;

if(isIE){
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).text; xmldom.documentElement.getElementsByTagName("body").item(0).text;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).text;
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).textContent;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).textContent;
endScript = xmldom。 documentElement.getElementsByTagName("onEnd").item(0).textContent;
}
完了。あとはそれをどうやって実行するかです。
スクリプトを動的に実行する必要がある場合、3 つの方法があります。
a) JavaScript の Global オブジェクトの eval() メソッド;
b) DHTML ウィンドウの execScript() メソッド;
c) JavaScript の new Function() メソッド;
最初のメソッドは、呼び出しのコンテキストをスクリプトのコンテキストとして使用します。実行後のスコープは、呼び出された関数またはメソッドの本体内のみです。嫌な問題;
2 番目のメソッドは DHTML のトップレベル オブジェクト ウィンドウで実行されるため、スコープの問題はありませんが、execScript() メソッドにはブラウザの互換性の問題があります。まさに IE 独自のメソッドです。 Firefox では使用できません。
3 番目のメソッドは、使用が不便であるだけでなく、変数を宣言するだけの場合は非常に面倒な問題です。
ブラウザの互換性に問題がない場合は、2 番目のオプションを使用するのが最良の選択です。
3 番目のオプションは考慮されません。
スコープの問題を解決できる場合は、最初の方法が最適です。
私が考えた方法は次のとおりです;
Web ページ内で変数を宣言します。
つまり、var author = "Xi De San Ren"; または関数を宣言します。
つまり:
function getBlogUrl(){
return author "ブログのアドレス: http://shizhong8841.blog.163.com";
現時点では、
window.author = "Xi De Sanren";
window.getMyBlogUrl = function(){
return this.author "ブログのアドレス: http://shizhong8841.blog.163.com" と同等;
}
したがって、ウィンドウ オブジェクトを少し拡張するだけです。
window.runScript = function(str){
eval(str);
}
Magic this 次に、this.a=0 または this.funName = function(arg0) {} を使用します。 ; この方法でスクリプトを記述して runScript(str); メソッドを呼び出すことは、ページ内でグローバル プロパティとメソッドを定義することと同等であり、スコープの問題を排除して目的を達成できます。
これで、すべての問題が解決され、InternetElpxerer 6.0 および Firefax 2.0 でのすべてのテストに合格しました。私が書いたコードはあまりにも乱雑なので、恥ずかしさを避けるために投稿しませんが、それでもアイデアは正しいはずです。
その他の質問については後ほど説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。