2011-12-01 60 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上測試過嗎? –