AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.11.2013, 13:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
axforum blogs: Кросбраузерный CRM. Последняя капля
Источник: http://axforum.info/forums/blog.php?b=6402
==============

Вчера пролилась последняя капля моей крови в борьбе за кросбраузерность моего решения на CRM… В одном из своих прошлых постов этой серии Кросбраузерный CRM. Первая кровь... я писал о врожденных изъянах InternetExplorer при работе с XPath.

Выяснилось, что объект XMLHttpRequest в IE10+ стал возвращать наивный XML вместо, MSXML как это было ранее. В результате у него отпали MS методы selectNodes, но почему-то так и не вырос стандартный метод evaluate. Различные рекомендуемые альтернативы, такие как Wicked Good XPath не принесли желаемого результата. Мне не удалось заставить заставить работать с этой библиотекой существующий код под FireFox - XPath не возвращал результаты.

К счастью, выяснилось, что все же существует включаемая обратная совместимость, позволяющая вернуть selectSingleNode на его историческую родину. Для этого, объекту XMLHttpRequest необходимо задать свойство responseType = "msxml-document". Интересный нюанс заключается в том, что XMLHttpRequest готов сожрать этот параметр не в любой момент, а только в некоторых из состояний. Более того, в разных версиях реализаций может попытаться сблевать некорректно заданный responseType. В итоге, ваш код должен выглядеть как-то так:
X++:
var req = new XMLHttpRequest(); req.open("POST", this._SoapPath(), true) // Затычка для IE10+ if (typeof (document.evaluate) == "undefined") { try { req.responseType = "msxml-document"; } catch (e) {} }
Возвращенный MSXML документ, действительно реализует старые добрые функции, однако это есть еще один сюрприз. Выясняется, что в новой редакции эти методы внезапно прониклись поддержкой XML нейспейсов, в чем не были замечены раньше. В итоге, обрабатывать результат теперь тоже приходится по-другому:
X++:
function selectSingleNode(xmlDoc, elementPath, node) { if (xmlDoc.evaluate) { function nsResolver(prefix) { var ns = { "s": "http://schemas.xmlsoap.org/soap/envelope/", "i": "http://www.w3.org/2001/XMLSchema-instance", "a": "http://schemas.microsoft.com/xrm/2011/Contracts", "b": "http://schemas.microsoft.com/xrm/2011/Contracts", "c": "http://schemas.datacontract.org/2004/07/System.Collections.Generic", "d": "http://www.w3.org/2001/XMLSchema" }; return ns[prefix] || null; } var nodes = xmlDoc.evaluate(elementPath, node || xmlDoc, nsResolver, XPathResult.ANY_TYPE, null); var results = nodes.iterateNext(); return results; } else { try { var ns = "xmlns:s='http://schemas.xmlsoap.org/soap/envelope/' "; ns += "xmlns:i='http://www.w3.org/2001/XMLSchema-instance' "; ns += "xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts' "; ns += "xmlns:b='http://schemas.microsoft.com/xrm/2011/Contracts' "; ns += "xmlns:c='http://schemas.datacontract.org/2004/07/System.Collections.Generic' "; ns += "xmlns:d='http://www.w3.org/2001/XMLSchema' "; xmlDoc.setProperty("SelectionNamespaces", ns); return (node || xmlDoc).selectSingleNode(elementPath); } catch (e) { throw new Error("No XPath Support"); } } }
Мораль: будь проклят тот день, когда я связался с XPath. Удачного кодинга

Полезные ссылки:
http://stackoverflow.com/questions/1...plorer-10-gone
http://blogs.msdn.com/b/ie/archive/2...e-preview.aspx


Источник: http://axforum.info/forums/blog.php?b=6402
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 15 Blog bot Dynamics CRM: Blogs 1 10.02.2016 10:26
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 14 Blog bot Dynamics CRM: Blogs 0 12.07.2013 07:13
Microsoft Dynamics CRM Team Blog: Creating and Publishing a Web Portal to an Azure Cloud Service Blog bot Dynamics CRM: Blogs 0 17.04.2013 23:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 13 Blog bot Dynamics CRM: Blogs 0 27.03.2013 22:12
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 10 Blog bot Dynamics CRM: Blogs 0 17.08.2012 03:27

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:01.