【发布时间】:2011-12-21 16:56:12
【问题描述】:
目标是能够单击链接以打开一个新窗口,该窗口显示来自父窗口的格式化源代码。
通过研究,我能够完成大部分任务,但我需要新窗口来完全显示源代码,就像它在父级、缩进等中一样。目前,HTML 实体作为其显示对应物显示(因此它输出实际商标而不是源的™)。
我正在考虑遍历一堆实体并进行字符串替换,正如您将在我的示例中看到的那样,但我认为逻辑已关闭,我不知道发生了什么。
特别是实体: • (bull), & (amp), ® (reg), ™ (trade), (gt)
这是我到目前为止所拥有的超链接启动的代码,任何能够弄清楚在第二行输出什么结束正文标签的人(我很难过):
非常感谢您提供任何导致解决方案的方向。
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( );
}
【问题讨论】:
-
你想要当前的DOM源还是服务器的原始源?
-
我猜是当前的 DOM 源。它是一个直接的 HTML 页面,因此没有呈现服务器端代码,也无法用作解决方案。
-
DOM 源不区分实体及其字符。
-
嗯,我可能有点困惑。例如,在上面代码的第 11 行,如果我通过上下文菜单执行实际的“查看源代码”,它会像上面那样显示。此 JavaScriput 输出窗口将其显示为
new Entity( '<', '<' ),。我想我提出的解决方案行不通。也许,像能够执行命令“view-source:index.html”这样的替代方法可以工作吗?我无法让它在 IE9 中工作。 -
View Source显示来自服务器的原始源,而不是 DOM 的当前状态。如果你愿意,你可以使用 AJAX。
标签: javascript encoding html-entities formatted-text