WPF XAML 瀏覽器應用程式概觀
XAML 瀏覽器應用程式 (XBAP) 合併 Web 應用程式和豐富型用戶端應用程式的功能。 與 Web 應用程式相同,XBAP 可以部署至網頁伺服器,而且可以從 Windows 上的 Internet Explorer 或 Firefox 予以啟動。 與豐富型用戶端應用程式相同,XBAP 可以利用 WPF 的功能。 開發 XBAP 也類似於豐富型用戶端開發。 本主題提供 XBAP 開發的簡單、高階介紹,並且描述 XBAP 開發與標準豐富型用戶端開發的不同之處。
警告
XBAP 需要舊版瀏覽器才能運作,例如 Internet Explorer 和舊版 Firefox。 Windows 10 和 Windows 11 通常不支援這些舊版瀏覽器。 基於安全性風險,新式瀏覽器不再支援 XBAP 應用程式所需的技術。 不再支援啟用 XBAP 的外掛程式。 如需詳細資訊,請參閱 WPF 瀏覽器裝載應用程式 (XBAP) 常見問題集。
本主題包含下列幾節:
建立新的 XAML 瀏覽器應用程式 (XBAP)
建立新 XBAP 專案的最簡單方法是使用 Visual Studio。 建立新專案時,從範本清單選取 [WPF 瀏覽器應用程式]。 如需更多詳細資訊,請參閱如何:建立新的 WPF 瀏覽器應用程式專案。
當您執行 XBAP 專案時,它會在瀏覽器視窗中開啟,而不是在獨立視窗中開啟。 當您從 Visual Studio 針對 XBAP 進行偵錯時,應用程式會使用網際網路區域權限執行,因此如果超過這些權限,則會擲回安全性例外狀況。 如需詳細資訊,請參閱安全性和 WPF 部分信任安全性。
注意
如果您不要使用 Visual Studio 進行開發,或者想要深入了解專案檔案,則請參閱建置 WPF 應用程式。
部署 XBAP
當您建置 XBAP 時,輸出會包含下列三個檔案︰
檔案 | 說明 |
---|---|
可執行檔 (.exe) | 它包含已編譯的程式碼,副檔名為 .exe。 |
應用程式資訊清單 (.manifest) | 它包含與應用程式相關聯的中繼資料,副檔名為 .manifest。 |
部署資訊清單 (.xbap) | 這個檔案包含 ClickOnce 用來部署應用程式的資訊,而且且副檔名為 .xbap。 |
您將 XBAP 部署至網頁伺服器,例如 Microsoft Internet Information Services (IIS) 5.0 或更新版本。 您不需要在網頁伺服器上安裝 .NET Framework,但必須註冊 WPF 多用途網際網路郵件延伸標準 (MIME) (MIME) 類型和副檔名。 如需詳細資訊,請參閱設定 IIS 5.0 和 IIS 6.0 以部署 WPF 應用程式。
若要準備您的 XBAP 以進行部署,將 .exe 和相關聯的資訊清單複製到 Web 伺服器。 建立 HTML 網頁,其中包含可開啟部署資訊清單 (它是副檔名為 .xbap 的檔案) 的超連結。 使用者按一下 .xbap 檔案的連結時,ClickOnce 會自動處理下載和啟動應用程式的機制。 下列範例程式碼顯示包含指向 XBAP 之超連結的 HTML 網頁。
<html>
<head></head>
<body>
<a href="XbapEx.xbap">Click this link to launch the application</a>
</body>
</html>
您也可以在網頁的框架中裝載 XBAP。 建立具有一或多個框架的網頁。 將框架的來源屬性設為部署資訊清單檔。 如果您想要使用內建的機制,在裝載的網頁和 XBAP 之間進行通訊,您必須在框架中裝載應用程式。 下列程式碼範例顯示具有兩個框架的 HTML 網頁,第二個框架的來源設定為 XBAP。
<html>
<head>
<title>A page with frames</title>
</head>
<frameset cols="50%,50%">
<frame src="introduction.htm">
<frame src="XbapEx.xbap">
</frameset>
</html>
清除快取 XBAP
在某些情況下,重新建置並啟動您的 XBAP 之後,您可能會發現舊版 XBAP 開啟。 例如,當 XBAP 組件版本號碼是靜態的,且您從命令列啟動 XBAP 時,可能會發生這種行為。 在此情況下,因為快取版本 (先前已啟動的版本) 與新版本之間的版本號碼維持不變,所以不會下載新版本的 XBAP。 相反地,會載入快取版本。
在這些情況下,您可以在命令提示字元中使用 Mage 命令 (與 Visual Studio 或 Windows SDK 一起安裝),來移除快取版本。 下列命令會清除應用程式快取。
Mage.exe -cc
此命令可確保啟動最新版本的 XBAP。 當您在 Visual Studio 中針對應用程式進行偵錯時,應該會啟動最新版本的 XBAP。 一般而言,您應該以每個組建更新您的部署版本號碼。 如需 Mage 的詳細資訊,請參閱 Mage.exe (資訊清單產生和編輯工具)。
與主機網頁通訊
當應用程式裝載在 HTML 框架中時,您可以與包含 XBAP 的網頁進行通訊。 作法是擷取 BrowserInteropHelper 的 HostScript 屬性。 這個屬性會傳回代表 HTML 視窗的指令碼物件。 您接著可以使用一般 dot 語法,在視窗物件上存取屬性、方法和事件。 您也可以存取指令碼方法和全域變數。 下列範例示範如何擷取指令碼物件,並且關閉瀏覽器。
private void Button_Click(object sender, RoutedEventArgs e)
{
// Retrieve the script object. The XBAP must be hosted in a frame or
// the HostScript object will be null.
var scriptObject = BrowserInteropHelper.HostScript;
// Call close to close the browser window.
scriptObject.Close();
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Retrieve the script object The XBAP must be hosted in a frame or
' the HostScript object will be null.
Dim scriptObject = BrowserInteropHelper.HostScript
' Call close to close the browser window.
scriptObject.Close()
End Sub
針對使用 HostScript 的 XBAP 進行偵錯
如果您的 XBAP 使用 HostScript 物件與 HTML 視窗進行通訊,則您必須指定兩個設定,以在 Visual Studio 中執行應用程式並對其進行偵錯。 應用程式必須能夠存取它的來源網站,而且您必須使用包含 XBAP 的 HTML 網頁來啟動應用程式。 下列步驟說明如何檢查這兩項設定︰
在 Visual Studio 中,開啟專案屬性。
在 [安全性] 索引標籤上,按一下 [進階] 。
[進階安全性設定] 對話方塊隨即出現。
請確定 [允許應用程式存取它的來源網站] 核取方塊已勾選,然後按一下 [確定]。
在 [偵錯] 索引標籤上,選取 [瀏覽器起始 URL] 選項,並且指定包含 XBAP 之 HTML 網頁的 URL。
在 Internet Explorer 中,按一下 [工具] 按鈕,然後選取 [網際網路選項]。
此時會出現 [網際網路選項] 對話方塊。
按一下 [進階] 索引標籤。
在 [安全性] 底下的 [設定]清單中,勾選 [允許檔案中的主動式內容在我的電腦上執行] 核取方塊。
按一下 [確定]。
變更在重新啟動 Internet Explorer 之後才會生效。
警告
在 Internet Explorer 中啟用主動式內容可能會讓電腦面臨風險。 如果您不想要變更 Internet Explorer 安全性設定,則可以從伺服器啟動 HTML 網頁,並且將 Visual Studio 偵錯工具連結至程序。
XBAP 安全性考量
XBAP 通常會在部分信任安全性沙箱中執行,它限制為網際網路區域權限集合。 因此,您的實作必須支援 WPF 元素的子集,而其在網際網路區域受到支援,或者必須提高應用程式的權限。 如需詳細資訊,請參閱安全性。
當您在應用程式中使用 WebBrowser 控制項時,WPF 會在內部具現化原生 WebBrowser ActiveX 控制項。 當您的應用程式是在 Internet Explorer 中執行的部分信任 XBAP 時,ActiveX 控制項會在 Internet Explorer 流程的專用執行緒中執行。 因此,會套用下列限制:
WebBrowser 控制項應該提供類似主機瀏覽器的行為,包括安全性限制。 其中一些安全性限制可以透過 Internet Explorer 安全性設定來控制。 如需詳細資訊,請參閱安全性。
當 XBAP 在 HTML 網頁跨網域載入時,則會擲回例外狀況。
輸入是在來自 WPF WebBrowser 的個別執行緒上,因此無法攔截關鍵字輸入,且不會共用 IME 狀態。
因為在另一個執行緒上執行的 ActiveX 控制項,瀏覽的時間或順序可能不同。 例如,瀏覽至頁面不一定會因為啟動另一個瀏覽要求而取消。
自訂 ActiveX 控制項可能會遇到通訊問題,因為 WPF 應用程式是在個別執行緒中執行。
因為 HwndHost 無法產生另一個執行緒或程序中所執行視窗的子類別,所以不會引發 MessageHook。
建立完全信任 XBAP
如果您的 XBAP 需要完全信任,您可以變更專案以啟用此權限。 下列步驟描述如何啟用完全信任︰
在 Visual Studio 中,開啟專案屬性。
在 [安全性] 索引標籤上,選取 [這是完全信任的應用程式] 選項。
這項設定會進行下列變更︰
在專案檔中,
<TargetZone>
元素值變更為Custom
。在應用程式資訊清單 (app.manifest) 中,
Unrestricted="true"
屬性會新增至 PermissionSet 元素。<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
部署完全信任 XBAP
當您部署未遵循 ClickOnce 受信任部署模型的完全信任 XBAP 時,使用者執行應用程式時的行為將取決於安全性區域。 在某些情況下,使用者會在嘗試安裝它時收到一則警告。 使用者可以選擇繼續或取消安裝。 下表描述每個安全性區域的應用程式行為,以及您必須針對應用程式執行什麼動作才能得到完全信任。
安全性區域 | 行為 | 取得完全信任 |
---|---|---|
本機電腦 | 自動的完全信任 | 不需要採取任何動作。 |
內部網路和信任的網站 | 完全信任的提示 | 使用憑證簽署 XBAP,讓使用者在提示中看到來源。 |
網際網路 | 因為「未授與信任」而失敗 | 使用憑證簽署 XBAP。 |
注意
上表中描述的行為是針對未遵循 ClickOnce 受信任部署模型的完全信任 XBAP。
建議您使用 ClickOnce 受信任部署模型來部署完全信任 XBAP。 此模型可讓您的 XBAP 自動授與完全信任,無論安全性區域為何,因此系統不會提示使用者。 做為此模型的一部分,您必須使用受信任發行者的憑證來簽署應用程式。 如需詳細資訊,請參閱受信任應用程式部署概觀和程式碼簽署簡介。
XBAP 開始時間效能考量
XBAP 效能很重要的層面是其開始時間。 如果 XBAP 是載入的第一個 WPF 應用程式,「冷啟動」時間可以是 10 秒或以上。 這是因為進度頁面是由 WPF 轉譯,且 CLR 和 WPF 必須冷啟動來顯示應用程式。
從 .NET Framework 3.5 SP1 開始,會在部署週期早期顯示非受控進度頁面,降低 XBAP 冷啟動時間。 進度頁面幾乎是在應用程式啟動之後立即出現,因為它是由原生裝載程式碼顯示,並且以 HTML 轉譯。
此外,改善的並行 ClickOnce 下載序列,會改善最多 10% 的啟動時間。 ClickOnce 下載和驗證資訊清單之後,會開始應用程式下載,並且開始更新進度列。