5

我正在尝试编写一个书签来帮助一些 QA 测试人员在遇到问题时提交有用的调试信息。目前我可以将 window.location 设置为提供此调试信息的 URL,但此资源是带有 xml-stylesheet 处理指令的 XML 文档。

如果测试人员能够以纯文本形式查看原始 XML 数据,或者 IE 和 Firefox 的默认 XML 呈现,实际上会更方便。

有谁知道使用 Internet Explorer 或 Firefox 禁用或覆盖 XML 文档中提供的 xml-stylesheet 指令的方法?

编辑:我在这个问题上开了一个赏金。要求:

  • 仅客户端代码,不允许用户干预
  • 需要 IE 和 Firefox 的解决方案(它们可以是不同的解决方案)
  • 禁用样式表处理并将其呈现为文本是可以接受的
  • 使用自定义 XSL 覆盖样式表处理是可以接受的
  • 使用浏览器默认 XML 样式表呈现 XML 是可以接受的
4

5 回答 5

3

编辑:太糟糕了,虽然在预览中看起来一切都很好,但可点击的例子似乎把事情搞砸了......也许历史上的布局很好。

我听说,但无法验证 IE,IE 和 Firefox 都支持“view-source:”伪协议。Mac 上的 Firefox 确实理解它,但 Safari 不理解。

以下小书签不会触发XML中指定的 XSLT 转换。尽管 Firefox 将使用某些颜色呈现它,但它不会执行通常用于没有任何 XSLT 的 XML的默认转换(因此,视图源的结果不会产生 Firefox 通常会显示的可折叠文档树):

javascript:(function(){
  var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml';
  var w = window.open();
  w.document.location.href = 'view-source:' + u;
})()

当使用 Ajax 获取文档时,不仅限于使用的alert oneporter,还可以在新窗口中显示它。同样:这不会调用指定的 XSLT 转换:

javascript:(function(){
  var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml';

  var w = window.open(); /* open right away for popup blockers */

  var x = new XMLHttpRequest();
  x.open('GET', u, true); 
  x.onreadystatechange = function(){
    if(x.readyState == 4){
      w.document.open('text/html');
      /* hack to encode HTML entities */
      var d = document.createElement('div'); 
      var t = document.createTextNode(x.responseText); 
      d.appendChild(t);
      w.document.write('<html><body><pre>' 
          + d.innerHTML + '</pre></body></html>');
      w.document.close();
      w.focus();
    }
  };
  x.send(null); 
})()
于 2009-05-01T15:07:15.423 回答
2

你不能在两个浏览器中都做“查看源代码”吗?

于 2009-04-25T09:26:46.697 回答
2

您可以通过在浏览器中输出内容之前使用中间步骤对 XML 进行预处理来避免处理指令。

客户端建议

  1. 通过 AJAX 请求检索相关的 XML 文档
  2. XML 解析为 DOM(注意:DOM不是DOM)
  3. 遍历 DOM 并在浏览器中渲染所需的数据

服务器端建议

不要直接请求相关的 XML 文档,而是向代理脚本发出请求,该脚本从 XML 内容中删除所有处理指令,或者实际上是所有您不想要的。

代替:

window.location = 'http://example.com/document.xml';

采用:

window.location = 'http://example.com/proxy/';


http://example.com/proxy/上的脚本将:

  1. 加载document.xml
  2. 使用任何必要的东西从 XML 内容中删除处理指令
  3. 输出 XML 内容
于 2009-04-26T19:21:16.370 回答
2

只要您不必处理跨域权限,带有 XML 源的简单 ajax 请求/警报框就可以解决问题。您必须在 xmlHttp 声明中添加一些内容以使其与 IE 兼容。

<html>
<body>

<script language="JavaScript">
function ajaxFunction()
{

var xmlHttp=new XMLHttpRequest();;

  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      alert(xmlHttp.responseText);
      }
    }
  xmlHttp.open("GET","YOURFILE.xml",true);
  xmlHttp.send(null);

}
</script>

<a href="#" onclick="JavaScript:ajaxFunction()">Errors</a>

</body>
</html>
于 2009-04-29T01:45:06.523 回答
1

据我所知,没有办法做你想做的事。问题是,javascript 无法从客户端 xml/xsl 转换读取 xml 的 dom。就 javascript 而言,它是在普通的 html dom 上执行的。

但是,根据 webapp 的类型,可能会有一些希望。您可以使用 ajax 来获取当前 url 的 xml。只要没有发布数据或任何其他随机性,此方法应该可以正常工作。

于 2009-04-25T00:20:48.647 回答