AJAX W3のバリデーターへの入力要求によって行われたDOM変更を含む、適切な生成されたソースを提供するツールを探しています。
何らかの方法で修正または変更せずに、ソースの正確な現在のバージョンを提供するプログラムまたはアドオンはありますか?これまでのところ、Firebugは最高のように見えますが、私の間違いのいくつかを修正するかもしれないと心配しています。
ソリューション
ジャスティンが説明したように、私が望んでいたものに対する正確な解決策はありません。最善の解決策は、Firebugに起因するいくつかのエラーが含まれている場合でも、Firebugのコンソール内のソースを検証することです。また、「生成されたソースの表示」が実際のソースと一致しない理由を説明してくれた、忘れられたセミコロンにも感謝します。 2つのベストアンサーをマークできれば、そうします。
[編集した質問の詳細に応じて更新する]
実行中の問題は、ページがajaxリクエストによって変更されると、現在のHTMLがブラウザーのDOM内にのみ存在することです。 DOM。
ご存じのとおり、IEのDOMはタグを大文字で保存し、閉じられていないタグを修正し、元のHTMLに他の多くの変更を加えます。これは、ブラウザは一般に問題のあるHTML(閉じられていないタグなど)を取得し、それらの問題を修正してユーザーに役立つものを表示するのに非常に優れているためです。 HTMLがIEによって正規化されると、私の知る限り、元のソースHTMLはDOMの観点から本質的に失われます。
Firefoxのほとんどのlikleyはこれらの変更をほとんど行わないので、おそらくFirebugの方が良いでしょう。
最後の(より労働集約的な)オプションは、単純なajaxの変更があるページで機能する場合があります。サーバーからHTMLを取得し、特定の要素内のページにインポートします。その場合、フィドラーまたは同様のツールを使用して、元のHTMLとAjax HTMLを手動でつなぎ合わせることができます。これはおそらく価値があるよりもトラブルであり、エラーが発生しやすいですが、もう1つの可能性があります。
[元の質問に対する元の回答]
Fiddler( http://www.fiddlertool.com/ )は、ブラウザが受信した正確なHTMLを取得するために非常にうまく機能する、ブラウザに依存しない無料のツールです。ワイヤ上の正確なバイト数と、任意のHTML分析ツールにフィードできるデコード済み/解凍済みなどのコンテンツが表示されます。また、ヘッダー、タイミング、HTTPステータス、その他多くの優れた機能も表示されます。
サーバーがわずかに異なるヘッダーにどのように応答するかをテストする場合は、フィドラーを使用してリクエストをコピーおよび再構築することもできます。
Fiddlerはプロキシサーバーとして動作し、ブラウザとWebサイトの間に位置し、双方向のトラフィックを記録します。
ジャスティンは死んでいる。ここで重要なのは、HTMLはドキュメントを記述するための単なる言語であるということです。ブラウザがそれを読み取ると、なくなった。開始タグ、終了タグ、および書式設定はすべて、パーサーによって処理されますそして終了します。 HTMLを表示するツールは、ドキュメントのコンテンツに基づいて生成中であるため、常に有効です。
私はこれを別のウェブ開発者に一度説明しなければならず、彼がそれを受け入れるのに少し時間がかかりました。
JavaScriptコンソールで自分で試すことができます。
el = document.createElement('div');
el.innerHTML = "<p>Some text<P>More text";
el.innerHTML; // <p>Some text</p><p>More text</p>
閉じられていないタグと大文字のタグ名はなくなりました。そのHTMLは2行目以降に解析され、破棄されたためです。
JavaScriptからドキュメントを修正する正しい方法は、document
メソッド(createElement
、appendChild
、setAttribute
など)を使用することです。これらの関数のタグまたはHTML構文への参照はありません。 document.write
、innerHTML
、またはその他のHTMLを使用した呼び出しを使用してページを変更する場合、検証する唯一の方法は、ページに何を入れているかをキャッチして、そのHTMLを個別に検証することです。
ただし、ドキュメントのHTML表現を取得する最も簡単な方法は次のとおりです。
document.documentElement.innerHTML
私はこれが古い投稿であることを知っていますが、私はこれを見つけました 金片 これは古い(2006年)ですが、IE9でも動作します。私はこれに個人的にブックマークを追加しました。
ブラウザのアドレスバーにコピーして貼り付けます。
javascript:void(window.open("javascript:document.open(\"text/plain\");document.write(opener.document.body.parentNode.outerHTML)"))
Firefoxに関しては、Web開発者のツールバーが仕事をします。私は通常これを使用しますが、時々、いくつかの汚いサードパーティのasp.netコントロールはユーザーエージェントに基づいて異なるマークアップを生成します...
[〜#〜] edit [〜#〜]
ブライアンがコメントで指摘したように、一部のブラウザーはjavascript:
URLバーにコピー/貼り付けするときの部分。私がテストしたところ、IE10がそうです。
ドキュメントをChromeに読み込むと、Developer|Elements
ビューは、JSコードによって調整されたHTMLを表示します。直接HTMLテキストではなく、目的の要素を開く(展開する)必要がありますが、生成されたHTMLを効果的に検査することができます。
Web Developerツールバーで、Tools -> Validate HTML
または Tools -> Validate Local HTML
オプション?
Validate HTML
オプションは、URLをバリデーターに送信します。これは、公開されているサイトでうまく機能します。 Validate Local HTML
オプションは、現在のページのHTMLをバリデーターに送信します。これは、ログインの背後にあるページ、または公開されていないページでうまく機能します。
ソースチャートの表示 ( FireFoxアドオン としても)を試すこともできます。興味深いメモ:
Q. View Source ChartがXHTMLタグをHTMLタグに変更するのはなぜですか?
A.ありません。ブラウザはこれらの変更を行っており、VSCはブラウザがコードに対して行ったことを表示するだけです。最も一般的な:自己終了タグは、終了スラッシュ(/)を失います。 詳細については、レンダリングされたソースに関するこの記事をご覧ください(archive.org) 。
Firefox Web Developerツールバーの使用( https://addons.mozilla.org/en-US/firefox/addon/6 )
[ソースの表示]-> [生成されたソースの表示]に移動します
私は、まったく同じことをするためにいつもそれを使用しています。
これは古い質問であり、ここに古い答えがあります 持っている かつて私のために完璧に働いた 長年、しかし少なくとも2016年1月の時点ではそうではありません:
SquareFreeの "Generated Source"ブックマークレットは、あなたが望むことを正確に行います。@ Johnny5のその他の点では素晴らしい "old gold"とは異なり、ソースコードとして表示されます(少なくともGoogleの場合、ブラウザによって通常表示されるのではなくChrome):
https://www.squarefree.com/bookmarklets/webdevel.html#generated_source
残念ながら、@ Johnny5の「古い金」のように動作します。ソースコードとして表示されなくなりました。ごめんなさい。
私は同じ問題を抱えていて、ここで解決策を見つけました:
http://ubuntuincident.wordpress.com/2011/04/15/scraping-ajax-web-pages/
したがって、Crowbarを使用するには、ここからツールを使用します。
http://simile.mit.edu/wiki/Crowbar (現在(2015-12)404s)
ウェイバックマシンリンク:
http://web.archive.org/web/20140421160451/http://simile.mit.edu/wiki/Crowbar
間違った無効なHTMLを私に与えてくれました。
alert(document.documentElement.outerHTML);
Firefoxでは、ctrl-a(画面上のすべてを選択)を選択し、[選択ソースの表示]を右クリックします。これにより、JavaScriptによってDOMに加えられた変更がキャプチャされます。
Urlbarと入力してみませんか?
javascript:alert(document.body.innerHTML)
前述したように、ソースがDOMツリーに変換されると、元のソースはブラウザーに存在しなくなります。行う変更はすべて、ソースではなくDOMに対して行われます。
ただし、変更されたDOMを解析してHTMLに戻すことで、「生成されたソース」を確認できます。
これで、現在のDOMをHTMLページとして表示できます。
DOMはHTMLドキュメントで完全に表現できないことに注意してください。これは、DOMにはHTMLが属性を持っているよりも多くのプロパティがあるためです。しかし、これは合理的な仕事をします。
IE dev tools(F12)has ;; View> Source> DOM(Page)
DOMをコピーして貼り付けて保存し、バリデーターに送信する必要があります。
以下のJavaScriptコードスニペットは、完全なajaxレンダリングされたHTML生成ソースを取得します。ブラウザに依存しないもの。楽しい :)
function outerHTML(node){
// if IE, Chrome take the internal method otherwise build one as lower versions of firefox
//does not support element.outerHTML property
return node.outerHTML || (
function(n){
var div = document.createElement('div'), h;
div.appendChild( n.cloneNode(true) );
h = div.innerHTML;
div = null;
return h;
})(node);
}
var outerhtml = outerHTML(document.getElementsByTagName('html')[0]);
var node = document.doctype;
var doctypestring="";
if(node)
{
// IE8 and below does not have document.doctype and you will get null if you access it.
doctypestring = "<!DOCTYPE "
+ node.name
+ (node.publicId ? ' PUBLIC "' + node.publicId + '"' : '')
+ (!node.publicId && node.systemId ? ' SYSTEM' : '')
+ (node.systemId ? ' "' + node.systemId + '"' : '')
+ '>';
}
else
{
// for IE8 and below you can access doctype like this
doctypestring = document.all[0].text;
}
doctypestring +outerhtml ;
私が見つけたものは、Safariの BetterSource 拡張機能だけです
コンソールにajax呼び出しの結果を記録することで、同様の問題を解決できました。これは返されたhtmlであり、問題があれば簡単に確認できました。
ajax呼び出しの.done()関数にconsole.log(results)を追加して、デバッガコンソールでhtmlを表示できるようにしました。
function GetReversals() {
$("#getReversalsLoadingButton").removeClass("d-none");
$("#getReversalsButton").addClass("d-none");
$.ajax({
url: '/Home/LookupReversals',
data: $("#LookupReversals").serialize(),
type: 'Post',
cache: false
}).done(function (result) {
$('#reversalResults').html(result);
console.log(result);
}).fail(function (jqXHR, textStatus, errorThrown) {
//alert("There was a problem getting results. Please try again. " + jqXHR.responseText + " | " + jqXHR.statusText);
$("#reversalResults").html("<div class='text-danger'>" + jqXHR.responseText + "</div>");
}).always(function () {
$("#getReversalsLoadingButton").addClass("d-none");
$("#getReversalsButton").removeClass("d-none");
});
}