2011-12-01 20 views
0

我有一个使用WebBrowserTask.Show在浏览器中启动页面的WP7应用程序。 WebBrowserTask.URL值使用Uri.EscapeDataString进行转义(URL中有多个查询字符串参数),并且该页面在浏览器中正确显示。WP7浏览器在成功返回时挂起WebBrowserTask.Show

在WP OS 7.0上,离开浏览器后,再从启动页面再次启动浏览器,页面加载进度指示停止大约一半,页面加载不正确。

如果应用程序返回并且WebBrowserTask.Show用于再次在浏览器中启动相同的页面,则浏览器负载也会挂起。

在WP OS 7.1上,离开浏览器并再次启动浏览器后,页面会正确加载。

深入了解WP OS 7.0的问题?有任何修复或解决办法吗?我有一个重要的用户群,他们几个月都不会在芒果上。

+0

也许你应该只使用Uri.EscapeUriString而不是Uri.EscapeDataString。你是逃避整个字符串还是只是参数值?您是否验证过您的桌面计算机上打开的URL? –

+0

感谢您的想法,@xyzzer。 WP OS 7.0文档(.chm文件)很清楚,需要使用Uri.EscapeDataString。由于Uri.EscapeUriString对于WebBrowserTask.URL没有成功,所以我在开发过程中认为这是真实的。我正在逃避整个字符串:URL是从其他来源传入的,所以这很容易做到。未转义的URL可在桌面浏览器中正常打开。 –

回答

0

我不认为整个URL的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通过逃避一切,包括完全打破了URL“https://开头”前缀,而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只有一个字符串URL属性现在已经过时的WP7.1和财产确实需要使用转义的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只是为参数建立字符串时,然后逃脱再次得到的URI使用EscapeDataString整个。

+0

这是正确的,在WP OS 7中。0 WebBrowserTask有一个URL属性;在WP OS 7.1中,它具有Uri属性并将之前的URL属性标记为过时。正如我所解释的那样,问题不在于返回到应用程序,而是返回到创建问题的浏览器。 –

+0

由于我没有看到任何挂起时多次调用WebBrowserTask最后一个代码片段 - 我会说,你的URL字符串或在该地址的Web资源仍然有问题。 –

+0

感谢您的数据点。你在WP OS 7.0或7.1上测试过吗? –