Браузер WP7 зависает при возврате после успешного выполнения WebBrowserTask.Show - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть приложение WP7, которое использует WebBrowserTask.Show для запуска страницы в браузере.Значение WebBrowserTask.URL экранируется с помощью Uri.EscapeDataString (в URL имеется несколько параметров строки запроса), и страница корректно отображается в браузере.

В WP OS 7.0 после выхода из браузера, а затемпри повторном запуске браузера со стартовой страницы индикатор выполнения загрузки страницы останавливается примерно на полпути, и страница загружается неправильно.

Если приложение возвращается и WebBrowserTask.Show используется для запуска той же страницыв браузере снова загрузка браузера также зависает.

В WP OS 7.1 после выхода из браузера и повторного запуска браузера страница загружается правильно.

Любое понимание проблемыэто с WP OS 7.0?Есть ли какие-либо исправления или обходные пути?У меня есть важный сегмент пользователей, которые не будут в Манго в течение нескольких месяцев.

1 Ответ

0 голосов
/ 02 декабря 2011

Я не думаю, что Uri.EscapeDataString () для всего URL является правильным методом для использования здесь. См. Например:

string uriString =
    "https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";

string escapedDataString = Uri.EscapeDataString(uriString);
    "https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query"

string escapedUriString = Uri.EscapeUriString(uriString);
    "https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test%20query"

Кажется, что EscapeDataString полностью разрушает URL, экранируя все, включая префикс "https://"", в то время как EscapeUriString просто экранирует то, что необходимо экранировать.

В соответствии с документацией вы должны "использовать метод EscapeUriString, чтобы подготовить неэкранированную строку URI в качестве параметра для конструктора Uri.".

Лично - я всегда избегал только параметров Uri, которые я строил, поэтому, например, если значение параметра включало амперсанд - я мог бы принудительно избежать его вместо того, чтобы полагаться на EscapeUriString, чтобы знать все.

Очевидно, что "https% 3A% 2F% 2Fwww.google.com% 2Fsearch% 3Fgcx% 3Dw% 26sourceid% 3Dchrome% 26ie% 3DUTF-8% 26q% 3Dtest% 20query" не является допустимым URL-адресом.

* EDIT

Должно быть, я упустил, что в WP7.0 только свойство строкового URL-адреса устарело в WP7.1, и это свойство действительно требует экранирования всего URL-адреса с помощью EscapeDataString. Я попробовал это в обоих типах проектов - нацеливание на 7.0 и 7.1 и не заметил никакого зависания. Единственное отличие заключалось в том, что 7.0 всегда будет мешать моему приложению, а 7.1 - нет. Возможно, в вашем приложении есть какой-то другой код, который блокирует, когда вы возвращаетесь из-за захоронения. Вот мой код:

string uriString = 
    "https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);

var wbt = new WebBrowserTask();
wbt.URL = escapedDataString;
wbt.Show();

Другая идея - дважды избегать строки uri - сначала используйте вызов EscapeUriString для всего адреса или вызовите EscapeDataString только для параметров при построении строки, а затем снова экранируйте весь полученный uri, используя EscapeDataString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...