2014-01-08 97 views
1

我在收到bing.com加載Windows Phone 8上的WebBrowser控件時出現問題。似乎這樣做會啓動WP8搜索應用程序(與按下手機上的搜索按鈕)。問題是,一旦你點擊搜索應用程序中的一個結果,它就不會將你帶回到原來的應用程序 - 它會進入IE來顯示結果。這對我不起作用,並且在WebBrowser行爲中似乎是一個巨大的缺陷(IMO)。在WP8 WebBrowser控件中顯示m.bing.com

似乎有幾個應用程序能夠在不啓動手機搜索應用程序的情況下顯示bing.com,例如Image Downloader Free。又是一個,但我不記得這是什麼?

經過一番研究,我發現,要bing.com當WebBrowser_Navigating事件被炒魷魚3次:第一次請求的用戶輸入URL(www.bing.com),然後重定向到http://wp.m.bing.com/?mid=10006,然後重定向到bing:// home /?mid = 10006。

從轉發到Bing搜索應用程序阻止它相當簡單,只需將其添加到導航事件:

e.Cancel = (e.Uri.Scheme == "bing"); 

的問題是,這則只能說明Bing搜索頁面佔位它說「兵搜索「,並有一個鏈接,說」回到必應搜索「,它什麼都不做(它通常會重新啓動必應搜索應用程序)。

我有一些想法,但我不知道他們有多可行。

  • 在WP8 WebBrowser控件中,是否有可能僞造用戶代理?
  • 可以刪除或添加WebBrowser.Uri.Flags屬性中的某個項目,以影響Bing.com處理請求的方式嗎?
  • 如果沒有這些工作,我可以簡單地在我的Web服務器上創建一個虛擬頁面,將所有bing.com請求重定向到它,並使用卡編碼的用戶代理程序獲取m.bing.com首頁。我真的想盡量避免這樣做。從最終用戶的角度來看,他們永遠不會知道,但我只是增加了一個全新的開銷,維護和資源明智層。

如果你有興趣,連接是差異對EventArgs的發生在WebBrowser.Navigating事件中的3個請求之間的對象:

請求1(bing.com) - >請求2(轉發到wp.m.bing.com/?mid=10006) enter image description here

請求2(轉發到wp.m.bing.com/?mid=10006) - >請求3(轉發至冰: // home /?mid = 10006) enter image description here

tl; dr有誰知道阻止www.bing.com導致搜索應用程序在我的應用程序的WebBrowser控件中啓動的方法嗎?

謝謝!

回答

2

我不知道是否有更好的方法來處理這個問題,但我找到了解決方案。當後退按鈕被點擊時,我還沒有完美地工作,所以如果/當我找到更穩固的解決方案時,我會更新我的答案。我仍然認爲這是WP8中WebBrowser控件的一個大缺陷。

下面是代碼:

private bool _customHeaderRequest = false; 

private void MainBrowser_Navigating(object sender, NavigatingEventArgs e) 
{ 
    string host = e.Uri.Host.ToLowerInvariant().Trim(); 

    if ((host == "bing.com" || host.EndsWith(".bing.com")) && !_customHeaderRequest) 
    { 
     e.Cancel = true; 

     Dispatcher.BeginInvoke(() => 
      MainBrowser.Navigate(e.Uri, null, 
       "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)\r\n")); 

     _customHeaderRequest = true; 
     return; 
    } 

    _customHeaderRequest = false; 
} 

private void MainBrowser_Navigated(object sender, NavigationEventArgs e) 
{ 
    _customHeaderRequest = false; 
} 
1

我沒有訪問我的模擬器,但我試了一下我的手機上,並:

  1. 當你「不想桌面版本」,打開m.bing重定向不會發生。 COM。警告:手機版本不是很漂亮。

  2. 嘗試禁用WebBrowser上的腳本,這可能會阻止發生重定向。

  3. 您有可能只使用Google?

+0

嗨米格爾,感謝您的答覆。關於你的第一項:它確實阻止搜索應用程序在IE中打開,但它似乎不影響WebBrowser控件。我試過啓用和禁用腳本(它們在默認情況下被禁用)。他們似乎重定向了基於用戶代理和HTTP 30x響應代碼。關於谷歌,我希望我的用戶能夠去任何地方。該應用程序旨在掃描用戶所在的當前URL的HTML。我已經發布了一個解決方案,但並不完美。再次感謝。 –

+1

@AdamPlocher嘿,我們都必須在某些事情上進行破解。希望MS能夠解決這個問題,我可以想象有多少麻煩是必須的。您可以嘗試在支持論壇(http://answers.microsoft.com/en-us/winphone/forum/wp8?tab=QnA&status=answered&sort=HelpfulCount&dir=Desc)中發佈此內容,並查看他們是否可以將其報告爲缺陷。祝你好運:) – miguelarcilla

相關問題