Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:


MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Кросбраузерный CRM. Последняя капля
Запись от Артем Enot Грунин размещена 28.11.2013 в 12:22
Обновил(-а) Артем Enot Грунин 02.12.2013 в 14:57
Обновил(-а) Артем Enot Грунин 02.12.2013 в 14:57
Теги crossbrowser, firefox, ie10, java script
Вчера пролилась последняя капля моей крови в борьбе за кросбраузерность моего решения на CRM… В одном из своих прошлых постов этой серии Кросбраузерный CRM. Первая кровь... я писал о врожденных изъянах InternetExplorer при работе с XPath.
Выяснилось, что объект XMLHttpRequest в IE10+ стал возвращать наивный XML вместо, MSXML как это было ранее. В результате у него отпали MS методы selectNodes, но почему-то так и не вырос стандартный метод evaluate. Различные рекомендуемые альтернативы, такие как Wicked Good XPath не принесли желаемого результата. Мне так не удалось заставить работать с этой библиотекой существующий код под FireFox - XPath запрос не возвращает результаты.
К счастью, выяснилось, что все же существует включаемая обратная совместимость, позволяющая вернуть selectSingleNode на его историческую родину. Для этого, объекту XMLHttpRequest необходимо задать свойство responseType = "msxml-document". Интересный нюанс заключается в том, что XMLHttpRequest готов сожрать этот параметр не в любой момент, а только в некоторых из состояний. Более того, в разных версиях реализации, он может попытаться сблевать некорректно заданный responseType. В итоге, ваш код должен выглядеть как-то так:
Возвращенный MSXML документ, действительно реализует старые добрые функции, однако, есть еще один сюрприз. Выяснилось, что в новой редакции, старые методы внезапно прониклись поддержкой XML нейспейсов, в чем не были замечены раньше. В итоге, обрабатывать результат теперь тоже приходится по-другому:
Мораль: будь проклят тот день, когда я связался с XPath. Удачного кодинга
Полезные ссылки:
http://stackoverflow.com/questions/1...plorer-10-gone
http://blogs.msdn.com/b/ie/archive/2...e-preview.aspx
Выяснилось, что объект 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) {} }
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");
}
}
}Полезные ссылки:
http://stackoverflow.com/questions/1...plorer-10-gone
http://blogs.msdn.com/b/ie/archive/2...e-preview.aspx
Всего комментариев 0



