目的は、リンクをクリックして、親ウィンドウからフォーマットされたソース コードを表示する新しいウィンドウを表示できるようにすることです。
調査を通じて、ほとんどのタスクを達成することができましたが、親、インデント、およびすべてのソース コードをそのまま表示するには、新しいウィンドウが必要です。現在、HTML エンティティは対応する表示として表示されています (したがって、ソースの の代わりに実際の商標を出力します™
)。
私の例でわかるように、一連のエンティティをループして文字列の置換を行うことを考えていましたが、ロジックがオフになっていると考えており、何が起こっているのかわかりません。
特にエンティティ: • (雄牛)、& (amp)、® (reg)、™ (貿易)、< (lt)、> (gt)
これまでのところ、ハイパーリンクが起動するコードは次のとおりです。2行目に終了ボディタグが出力されていることを理解できる人へのボーナスです(私は困惑しています):
解決につながる方向性については、事前に非常に感謝しています。
function viewSource( e )
{
e.preventDefault( );
var source = '<!DOCTYPE html>' + "\n"
+ '<html xmlns="http://www.w3.org/1999/xhtml">' + "\n\n"
+ "\t" + document.getElementsByTagName( 'html' )[0].innerHTML + "\n\n"
+ '</html>';
entities = [
new Entity( '<', '<' ),
new Entity( '>', '>' )
];
for ( var i = 0; i < entities.length; i++ )
{
var regex = new RegExp( entities[i].entity, 'g' );
source = source.replace( regex, entities[i].html );
}
source = '<pre>' + source + '</pre>';
var sourceWindow = window.open( '', '_blank' );
sourceWindow.document.write( source );
sourceWindow.document.close( );
if ( window.focus )
{
sourceWindow.focus( );
}
}
更新(まだ未解決の謎):
AJAX リクエストを使用する提案を試みましたが、それでも同じ結果が得られます (11 行目は を示していますnew Entity( '<', '<'),
)。AJAX の試みは次のようになります。
function viewSource( e )
{
e.preventDefault( );
var xmlhttp;
if ( window.XMLHttpRequest )
{
// IE7+, Fx, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest( );
}
else
{
// IE6, IE5
xmlhttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
}
xmlhttp.onreadystatechange =
function ( )
{
if ( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
{
var source = xmlhttp.responseText.replace( /</g, '<' ).replace( />/g, '>' );
source = '<pre>' + source + '</pre>';
var sourceWindow = window.open( '', '_blank' );
sourceWindow.document.write( source );
sourceWindow.document.close( );
if ( window.focus )
{
sourceWindow.focus( );
}
}
};
xmlhttp.open( 'GET', '/', true );
xmlhttp.send( );
}