我有一个WP7应用程序,它使用WebBrowserTask.Show在浏览器中启动页面。 WebBrowserTask.URL值使用Uri.EscapeDataString进行转义(URL中有多个查询字符串参数),并且页面在浏览器中正确显示。
在WP OS 7.0上,离开浏览器,然后从“开始”页面再次启动浏览器时,页面加载进度指示器大约停止一半,页面无法正确加载。
如果返回应用程序并且WebBrowserTask.Show用于再次在浏览器中启动同一页面,则浏览器加载也会挂起。
在WP OS 7.1上,离开浏览器然后再次启动浏览器后,页面加载正确。
了解WP OS 7.0的问题是什么?有任何修复或解决方法吗?我有一个重要的用户群,他们将在几个月内不会使用芒果。
答案 0 :(得分:0)
我认为整个网址的Uri.EscapeDataString()不是在这里使用的正确方法。例如见:
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通过转义包括“https://”前缀在内的所有内容来完全破坏URL,而EscapeUriString只是逃避了需要转义的内容。
根据documentation你应该“使用EscapeUriString方法准备一个未转义的URI字符串作为Uri构造函数的参数。”。
就个人而言 - 我一直只是逃过了我正在构建的Uri的参数,所以例如如果参数值包含一个&符号 - 我可以强制转义它而不是依赖EscapeUriString来了解所有内容。
显然 - “https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query”不是有效的网址。
*编辑
我一定错过了WP7.0在WP7.1上只有一个字符串URL属性现在已经过时,而且该属性确实需要使用EscapeDataString转义整个URL。我在两个项目类型中尝试过它 - 目标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,然后使用EscapeDataString再次转义整个结果uri。