Сохранить разметку VML и CSS - PullRequest
       10

Сохранить разметку VML и CSS

2 голосов
/ 10 августа 2010

Я использую DD_roundies для создания закругленных углов в Internet Explorer. Страницы с закругленными элементами загружаются очень часто, и скрипт roundies должен многократно запускать скругления углов и исправлять png. Это стоит много времени. Сценарий создает некоторые элементы VML, которые помещаются в целевые элементы, и некоторые элементы CSS, которые он вставляет в блок.

Я хочу сохранить VML и CSS для повторного использования при загрузке страницы, чтобы мне не приходилось каждый раз запускать скрипт. Целевые элементы уже сохраняются в базе данных и повторно загружаются в DOM через Java во время загрузки.

Я сделал тестовую страницу, на которой после запуска скрипта roundies я затем извлекаю html-элементы, включая VML, пространство имен XML и CSS. У меня возникли некоторые проблемы с получением innerHTML блока в IE, но я смог получить его с помощью инструментов разработчика IE, чтобы проверить его. После получения различных частей я поместил их в отдельный HTML-файл, чтобы увидеть, правильно ли они будут отображаться. Мой тест не сработал.

Вот первая тестовая страница:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/base/jquery-ui.css" type="text/css" media="all" />
<script type="text/javascript">
$(function(){
   DD_roundies.addRule('#block_1', '20px 20px 0 0', true);
   DD_roundies.addRule('#block_2', '0 20px 20px 0', true);
   DD_roundies.addRule('#block_3', '0 0 20px 20px', true);
   DD_roundies.addRule('#block_4', '20px 0 0 20px', true);
   $('#getContent').click(function(){
      var allHTML = $('#allContent').html();
      $('#captureContent').text(allHTML).val(allHTML);
   });
   $('#getStyles').click(function(){
      var allStyles = $('#allStyles').html();
      $('#captureStyles').text(allStyles).val(allStyles);
   });
});
</script>
<div id="allContent">
<script src="http://www.dillerdesign.com/experiment/DD_roundies/DD_roundies_0.0.2a-min.js" type="text/javascript"></script>
<style id="allStyles" type="text/css">
   .blocks{
      width: 150px;
      height: 100px;
      margin: 5px;
      border: 3px solid #999;
   }
</style>
<div id="block_1" class="blocks"></div>
<div id="block_2" class="blocks"></div>
<div id="block_3" class="blocks"></div>
<div id="block_4" class="blocks"></div>
</div>
<button id="getStyles">Get Styles</button>
<textarea id="captureStyles"></textarea>
<br />
<button id="getContent">Get Content</button>
<textarea id="captureContent"></textarea>

Любая помощь будет принята с благодарностью, спасибо!

1 Ответ

1 голос
/ 01 октября 2010

Первая проблема заключается в том, что вы получите разные CSS в зависимости от того, какой браузер вы используете (что может быть очевидным для вас!).Стандарт CSS3 с закругленными углами еще предстоит стабилизировать, требуемый CSS будет отличаться в Firefox, браузерах на основе Webkit (Safari, Chrome) и Opera.Поэтому вам нужно использовать различные инструменты разработчика для приобретения CSS / VML.

Используя Firebug в Firefox, вы можете получить следующее:

#block_1 {
  -moz-border-radius:20px 20px 0 0;
}

Используя инструменты разработчика Chrome, вы можете приобрести это:

#block_1 {
  border-bottom-left-radius: 0px 0px;
  border-bottom-right-radius: 0px 0px;
  border-top-left-radius: 20px 20px;
  border-top-right-radius: 20px 20px;
}

Если я упросту ваш пример до следующего:

<script src="http://www.dillerdesign.com/experiment/DD_roundies/DD_roundies_0.0.2a-min.js" type="text/javascript"></script>
<style id="allStyles" type="text/css">
   .blocks{
      width: 150px;
      height: 100px;
      margin: 5px;
      border: 3px solid #999;
   }
</style>
<div id="block_1" class="blocks"></div>
<script type="text/javascript">
DD_roundies.addRule('#block_1', '20px 20px 0 0', true);
</script>

Тогда инструмент разработчика IE8 даст мне:

<HTML XMLNS:DD_roundies = "urn:schemas-microsoft-com:vml"><HEAD>
<STYLE>DD_roundies\:* {
    BEHAVIOR: url(#default#VML)
}
#block_1 {
    ; BEHAVIOR: expression(DD_roundies.roundify.call(this, [20,20,0,0]))
}
</STYLE>

<STYLE id=allStyles type=text/css>.blocks {
    BORDER-BOTTOM: #999 3px solid; BORDER-LEFT: #999 3px solid; MARGIN: 5px; WIDTH: 150px; HEIGHT: 100px; BORDER-TOP: #999 3px solid; BORDER-RIGHT: #999 3px solid
}
</STYLE>
</HEAD>
<BODY style="POSITION: relative; ZOOM: 100%">
<ignore style="Z-INDEX: 0; WIDTH: 150px; HEIGHT: 100px; TOP: 15px; LEFT: 15px">
<DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "300,200" coordorigin = "1,1" filled = "f" fillcolor = "black" stroked = "f" path = " m6,40 l6,194 qy6,194 l294,194 qx294,194 l294,40 qy260,6 l40,6 qx6,40 e"><DD_roundies:fill></DD_roundies:fill></DD_roundies:shape><DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "150,100" coordorigin = "1,1" filled = "f" fillcolor = "none" stroked = "f" path = " m3,20 qy20,3 l131,3 qx148,20 l148,98 qy148,98 l3,98 qx3,98 l3,20 e"><DD_roundies:fill type = "tile"></DD_roundies:fill></DD_roundies:shape><DD_roundies:shape style="Z-INDEX: 0; POSITION: absolute; WIDTH: 150px; HEIGHT: 100px; TOP: 0px; LEFT: 0px" coordsize = "300,200" coordorigin = "1,1" fillcolor = "#999" stroked = "f" path = " m0,40 qy40,0 l260,0 qx300,40 l300,200 qy300,200 l0,200 qx0,200 l0,40 m6,40 l6,194 qy6,194 l294,194 qx294,194 l294,40 qy260,6 l40,6 qx6,40 e"><DD_roundies:fill></DD_roundies:fill></DD_roundies:shape></ignore>
<DIV style="POSITION: relative; ZOOM: 1; BEHAVIOR: none" id=block_1 class=blocks isImg="false"></DIV>
</BODY>
</HTML>

Теперь задача состоит в том, чтобырекомбинируйте все различные дампы CSS / VML-инструментов обратно в один HTML-файл, который, надеюсь, больше не будет нуждаться в DD_roundies!В качестве альтернативы, вы можете просто доверять DD_roundies для выполнения своей работы.Лично мне всегда угрожает попытка выполнить более сложную задачу, когда простая работа сделает лучше!

...