2012-11-08 23 views
2

在我的Windows Phone 8應用程序中,我有一個WebBrowser控件,我希望能夠重新路由所有http流量,這意味着我攔截了http GET並提供了來自我的應用的數據。不僅html而且所有流量(圖像等)。我試圖使用WebRequest.RegisterPrefix來註冊我自己的IWebRequestCreate以提供我自己的WebRequests。然而,看起來IWebRequestCreate我註冊只用於WebClients我實例化在我自己的代碼中,而不是由WebBrowser控件。攔截來自WebBrowser控件的流量並在WP8上提供我自己的數據

我發現這個線程:

How to register own protocol using the WebBrowser control?

但它似乎這種做法是不可能的。至少在Windows Phone 7中不行。我希望WP8有更好的運氣。或者也許完全不同的方法可行?

有人可以幫我嗎?

編輯:正如下面的Josh Mackey所建議的。我可能能夠通過代理運行所有的東西。不幸的是,我不確定如何將代理設置爲使用Windows Phone上的代碼在webBrowser控件上使用。看起來WP上既沒有WebRequest.DefaultWebProxy也沒有wininet.dll。任何人都知道這可以如何實現?

回答

0

正如您引用的鏈接所說:「WebBrowser控件將使用Windows Phone Internet Explorer瀏覽器的HTTP堆棧」,因此您無法截取它。但是,也許代理方法可能有用?

使用套接字,創建一個簡單的Web服務器,您可以告訴WebBrowser控件訪問嗎?

我從這裏的想法:Windows phone WebBrowser.Navigating event form data

+0

是的,如果可以設置特定web瀏覽器控件的代理。但是,我不明白這是怎麼做的。 我發現下面的鏈接,似乎解釋瞭如何設置代理服務器,但不幸的是它取決於wininet.dll中的p/invoking方法,這顯然在Windows Phone上不可用。 http://support.microsoft。com/kb/2563548 我也嘗試設置WebRequest.DefaultWebProxy(雖然這會給我更少的控制),但顯然這在Windows Phone上也不可用。 有人知道這可能是如何完成的? – user1809569

+0

如何重寫URL指向本地主機? –

+0

嗨喬希,考慮到JavaScript的可能性,我認爲這將是非常困難的帳戶所有情況。 – user1809569

0

什麼樣使用Web瀏覽器的導航事件(你可以取消)一個簡單的解決方案。

你必須提供的內容(我想這會不會觸發此事件)時,無論是提供自己的HTML,但你可以做這樣的事情

private void webBrowser_Navigating(object sender, NavigatingEventArgs e) 
{ 
    if (e.Uri.ToString().StartsWith("myprotocol://", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     e.Cancel = true; // Cancels the request 
     // my custom code here 
     // (where I go get the content and push it into the browser control by 
     //  webBrowser.NavigateToString("MyContent"); 
     //) 
    } 
} 

這實際上應該在這兩個WP7工作, 8.

一對夫婦的其他東西:

1)您可能要使用自己的忙部件指示應用程序正忙,因爲一旦您取消導航內置的一個將不會出現

2)您需要記住將Web瀏覽器上的「IsScriptEnabled」屬性設置爲true(即如果您需要啓用JavaScript ..默認爲false,哪個IMO很容易錯過)

3)如果您需要在頁面上進行後期處理,您還可以處理Navigated事件,該事件可以讓您在內容返回時對其進行覆蓋(或對其進行更改)

+0

對於主html頁面可以工作。但是,對於幀(包含來自其他站點的內容),圖像和其他資源,Navigating事件不會被觸發,因此無法取消。這意味着這些將直接從服務器下載(這與我試圖實現的目的相反)。正如Josh所建議的那樣,我可以將所有的URI都重寫爲本地引用,並讓我的應用程序提供它們,但考慮JavaScript的可能性,我相信要解決所有情況都是非常困難的。 – user1809569

+0

Yuck!對不起。只是看看你的情況,並假設你想(實質上)代理所有的調用(並假設你有一組更緊密的頁面/ URI你打的)我真的沒有考慮處理框架等。 – DevTheo

相關問題