Известно, что Outlook имеет очень ограниченные возможности для рендеринга HTML, подчинения CSS и, возможно, обработки Javascript.Это по-прежнему относится к последним версиям Outlook для Windows, которые поставляются с последними выпусками Office 365. Таким образом, не ожидайте никакой информации о , почему Outlook не работает должным образом, поскольку это коммерческий продукт с закрытым исходным кодом.это едва фокусируется на соответствии стандарту.Бьюсь об заклад, он работает, чтобы выглядеть максимально комфортно по дизайну.
Сравнение Outlook для Mac / Windows с Outlook Online усиливает это злополучное впечатление, поскольку Outlook Online полагается не на древний веб-движок, а на браузерты используешь.Итак, Chrome именно в вашем случае является противоположным концом спектра используемых в настоящее время веб-движков, причем Chrome находится на самом верхнем конце Outlook, безусловно, близко к низу.
Что касается вашего RegExp, вам следует попробовать уменьшить егоКод сначала устраняет ненужные побеги.Для этого попробуйте какой-нибудь приличный IDE или онлайн-инструмент регулярных выражений.
/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g
может стать
/[/,!\\^${}[\]().*+?|<>&-]/g
, хотя более старые браузеры, которые имеют ограниченные возможности для регулярных выражений, могут не анализировать это должным образом.Тем не менее, нескольким сбежавшим персонажам вообще не нужно убегать.Затем попробуйте тот же RegExp в самой старой версии Internet Explorer, которую вы можете получить.Если он работает там, может быть также работает в Outlook.Это не относится к последним версиям Internet Explorer 11.0, но он по-прежнему сильно отличается от того, что используется в Outlook.
Кроме того, я бы не стал полагаться на расширение прототипов собственных объектов -в отношении String.prototype.replaceAll = function ...
- в контексте, подобном Outlook для старых браузеров, также было известно о наличии проблем с этой функцией, и на нее могут быть наложены дополнительные ограничения из-за соображений безопасности в почтовом клиенте, выполняющем пользовательский код сценария.
Далее, я считаю себя достаточно опытным разработчиком Javascript, но я изо всех сил пытаюсь понять намерения вашего кода.Таким образом, IMHO, вы должны рассмотреть возможность использования другого подхода, который работает без сложного динамического RegExp.Я думаю, это помогает в получении более чистого кода, который способны понять люди, и что вы сможете объяснить через 18 месяцев.Ваш подход выглядит довольно хакерским, что является плохой комбинацией с поддержкой неработающих браузеров.Я уверен, что можно достичь ваших целей без регулярных выражений, используя только простой старый Javascript.Можно использовать простые базовые нединамические регулярные выражения, но попробуйте полагаться на "".indexOf()
и "".substring()
, и вы получите код, который работает и в Netscape Navigator 5.0.
Что касается обнаруженной версии браузера, попробуйте более подробно проанализировать navigator.userAgent
и сравнить его с существующими базами данных пользовательских агентов, чтобы получить более точный результат в отношении того, какой механизм браузера используется в Outlook.Упоминание Netscape Navigator само по себе ничего не значит.Мой браузер Edge утверждает, что имеет какое-то отношение к Mozilla / 5.0, AppleWebKit и Chrome / 64.0 одновременно.
В заключение, возможно, стоит отметить, что в отличие от названия этого вопроса ваш код имеет тенденцию работать вбольшинство (активно используемых) браузеров, но не работает в некоторых программах, которые едва ли являются браузерами, но содержат какой-то смутно известный веб-движок.