Почему фрейм WPF обрабатывает JavaScript иначе, чем IE?

#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.)