Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法让浏览器忽略或覆盖xml样式表处理指令?_Javascript_Xml_Xslt_Browser_Bookmarklet - Fatal编程技术网

Javascript 有没有办法让浏览器忽略或覆盖xml样式表处理指令?

Javascript 有没有办法让浏览器忽略或覆盖xml样式表处理指令?,javascript,xml,xslt,browser,bookmarklet,Javascript,Xml,Xslt,Browser,Bookmarklet,我正试图编写一个bookmarklet来帮助一些QA测试人员在遇到问题时提交有用的调试信息。目前,我可以将window.location设置为提供此调试信息的URL,但此资源是一个带有XML样式表处理指令的XML文档 如果测试人员能够以纯文本形式查看原始XML数据,或者查看IE和Firefox的默认XML呈现,那么实际上会更方便 有人知道使用Internet Explorer或Firefox禁用或覆盖xml文档中提供的xml样式表指令的方法吗 编辑:我已经就这个问题提出了悬赏。要求: 仅客户端

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

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

有人知道使用Internet Explorer或Firefox禁用或覆盖xml文档中提供的xml样式表指令的方法吗

编辑:我已经就这个问题提出了悬赏。要求:

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

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


      然而,根据webapp的类型,可能会有一些希望。可以使用ajax获取当前url的xml。只要没有post数据或任何其他随机性,此方法就可以正常工作。

      您不能在两种浏览器中都执行“查看源代码”操作吗?

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

      客户端建议

    • 通过AJAX请求检索相关的XML文档
    • 将XML解析为DOM(注意:DOM不是DOM)
    • 遍历DOM并在浏览器中呈现所需的数据
    • 服务器端建议

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

      而不是:

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


      此时脚本将:

    • 加载
      document.xml
    • 使用任何必要的方法从XML内容中删除处理指令
    • 输出XML内容

    • 只要不必处理跨域权限,一个简单的带有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>
      
      
      函数ajaxFunction()
      {
      var xmlHttp=new XMLHttpRequest();;
      xmlHttp.onreadystatechange=函数()
      {
      if(xmlHttp.readyState==4)
      {
      警报(xmlHttp.responseText);
      }
      }
      open(“GET”,“YOURFILE.xml”,true);
      xmlHttp.send(空);
      }
      
      编辑:太糟糕了,尽管预览中的一切看起来都很好,但可点击的示例似乎把事情搞砸了。。。也许历史上的布局还不错

      我听说,IE和Firefox都支持“查看源代码:”伪协议,但无法验证IE。Mac上的Firefox确实理解这一点,但Safari却不理解

      将不会触发中指定的以下bookmarklet。尽管Firefox会使用一些颜色来呈现,但它不会执行它通常用于的默认转换(因此,view source的结果不会产生Firefox通常会显示的可折叠文档树):

      使用Ajax获取文档时,不仅限于使用的
      警报
      ,还可以在新窗口中显示它。同样:这不会调用指定的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); 
      })()
      
      javascript:(函数(){
      var u='1http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml';
      var w=window.open();/*立即打开弹出窗口阻止程序*/
      var x=新的XMLHttpRequest();
      x、 打开('GET',u,true);
      x、 onreadystatechange=函数(){
      如果(x.readyState==4){
      w、 document.open('text/html');
      /*黑客对HTML实体进行编码*/
      var d=document.createElement('div');
      var t=document.createTextNode(x.responseText);
      d、 儿童(t);
      w、 文件。写(“”)
      +d.html+“”);
      w、 document.close();
      w、 焦点();
      }
      };
      x、 发送(空);
      })()
      
      您可以通过编写“呈现不同的文档或指向不同的文档”来缩短测试时间。我不想在测试人员身上花费太多精力。:)但毫不奇怪,这看起来是迄今为止最好的选择。IE8和Firefox中的+1源代码查看器在显示XML方面做得非常好。如果您想更改查看源代码的应用程序(例如,更改为Notepad2),那么Firefox源代码浏览器也接受ctrl+r来重新加载页面,这可能会很方便。一个简洁的解决方案是在源浏览器中放置一个位置栏
      javascript:(function(){
        var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml';
        var w = window.open();
        w.document.location.href = 'view-source:' + u;
      })()
      
      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); 
      })()