Есть ли способ заставить браузеры игнорировать или переопределять инструкции обработки таблиц стилей xml? - PullRequest
5 голосов
/ 22 апреля 2009

Я пытаюсь написать букмарклет, чтобы помочь некоторым тестировщикам QA предоставить полезную информацию об отладке при возникновении проблем. В настоящее время я могу задать для window.location URL-адрес, который предоставляет эту информацию об отладке, но этот ресурс является документом XML с директивой обработки таблицы стилей xml.

На самом деле было бы удобнее, если бы тестировщики могли видеть или необработанные данные XML в виде простого текста, или рендеринг XML по умолчанию для IE и Firefox.

Кто-нибудь знает способ отключения или переопределения директив xml-stylesheet, содержащихся в документе XML, с использованием Internet Explorer или Firefox?

Редактировать: я открыл щедрость на этот вопрос. Требования:

  • Только код на стороне клиента, вмешательство пользователя не допускается
  • Необходимы решения как для IE, так и для Firefox (это могут быть разные решения)
  • Отключение обработки таблицы стилей и отображение ее в виде текста приемлемо
  • Допускается переопределение обработки таблицы стилей с помощью пользовательского XSL
  • Рендеринг XML с помощью таблицы стилей XML по умолчанию в браузере является приемлемым

Ответы [ 5 ]

3 голосов
/ 01 мая 2009

РЕДАКТИРОВАТЬ : слишком плохо, хотя в предварительном просмотре все выглядело хорошо, на интерактивных примерах, кажется, что-то путалось ... Может быть, в истории все в порядке.

Я слышал, но не могу подтвердить для IE, что IE и Firefox поддерживают псевдопротокол "view-source:". Firefox на Mac действительно это понимает, а Safari - нет.

Следующий букмарклет не вызовет преобразование XSLT , указанное в XML . И хотя Firefox будет отображать это с использованием некоторых цветов, он не выполняет преобразование по умолчанию, которое обычно используется для XML без какого-либо XSLT (таким образом, результат view-source НЕ дает свертываемое дерево документов, которое 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:

<code>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 + '
'); w.document.close (); w.focus (); } }; x.send (нуль); }) ()
2 голосов
/ 29 апреля 2009

До тех пор, пока вам не придется иметь дело с междоменными разрешениями, простое окно запроса / оповещения ajax с источником XML поможет. Вам нужно будет немного добавить в объявление 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>
2 голосов
/ 25 апреля 2009

Разве вы не можете просто сделать "Просмотр источника" в обоих браузерах?

1 голос
/ 26 апреля 2009

Вы можете избежать инструкции обработки, используя промежуточный шаг для предварительной обработки XML перед выводом содержимого в браузер.

Предложение на стороне клиента

  1. Получить соответствующий XML-документ с помощью запроса AJAX
  2. Разобрать XML в DOM (примечание: a 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
0 голосов
/ 25 апреля 2009

Насколько я знаю, нет способа сделать то, что вы пытаетесь сделать. Проблема заключается в том, что javascript не может прочитать dom xml из преобразования xml / xsl на стороне клиента. Что касается javascript, он выполняется на обычном html dom.

Однако в зависимости от типа веб-приложения может возникнуть некоторая надежда. Вы можете использовать ajax, чтобы получить xml текущего URL. Пока нет данных постов или какой-либо другой случайности, этот метод должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...