#javascript #wpf #cross-browser
#javascript #wpf #кроссбраузерный
Вопрос:
Когда я загружаю HTML-страницу в Frame
элемент WPF, он запускает JavaScript иначе, чем если бы я загружал ту же страницу в веб-браузер, такой как IE. Почему это так, и есть ли какой Frame
-нибудь способ сделать так, чтобы поведение пользователя соответствовало поведению браузера?
Если я загружу следующий HTML-код в веб-браузер:
<!DOCTYPE html>
<script>
document.write('abc'[1])
</script>
он выводится b
в Chrome, FireFox, Opera и даже IE. Но если я загружу тот же HTML-код в WPF Frame
:
<Frame Source="C:PathToPage.htm" />
undefined
вместо этого он выводит результат.
Почему такая разница в поведении? Я думал Frame
, что должен был использовать Internet Explorer для рендеринга, но, видимо, он делает что-то другое.
Если я не указываю DOCTYPE
строку, то IE также выводит undefined
(хотя ни один из других браузеров этого не делает), что говорит о том, что IE использует другую версию JavaScript (!), Когда страница не объявляет себя HTML5. Но тогда я ожидал Frame
бы использовать ту же логику, и, очевидно, это не так — он использует более старую, не поддерживающую индексацию строк версию JavaScript, даже когда я объявляю страницу HTML5.
Что происходит, чтобы заставить Frame
JavaScript работать иначе, чем IE?
Ответ №1:
Он использует более низкий двигатель. Я полагаю, вы тестировали его на IE9? Что ж, IE9 оторвался от веб-браузера в стиле элемента управления ActiveX. Вам нужно использовать 'abc'.charAt(0)
вместо abc[0]
.
Комментарии:
1. Очень плохо, что они молча используют более старую версию IE, даже когда доступно что-то лучшее. Но я думаю, это дает мне простой способ определить, сломается ли мой JavaScript в IE6…
2. @JoeWhite: Или IE8, если уж на то пошло… немного грустно думать, что для каких-то 3 версий ничего не было исправлено. (Кроме того, кое-что, о чем я не упомянул — я полагаю, вы можете встроить движок WebKit в файл .NET. Так что, если вам нужна определенная функциональность, вы можете попробовать и это. Хотя я не уверен, насколько хорошо это работает в WPF.)