WPF XAML 瀏覽器應用程式概觀

XAML 瀏覽器應用程式 (XBAP) 結合 Web 應用程式和豐富用戶端應用程式的功能。 如同 Web 應用程式,XBAP 可以部署到 Web 伺服器,並從 Windows 上的 Internet Explorer 或 Firefox 啟動。 如同豐富的用戶端應用程式,XBAP 可以利用 WPF 的功能。 開發 XBAP 也類似於豐富型用戶端開發。 本主題提供 XBAP 開發的簡單、高階介紹,並且描述 XBAP 開發與標準豐富型用戶端開發的不同之處。

警告

XBAP 需要舊版瀏覽器才能運作,例如 Internet Explorer 和 Firefox。 Windows 10 和 Windows 11 通常不支援這些舊版瀏覽器版本。 由於安全性風險,新式瀏覽器不再支援 XBAP 應用程式所需的技術。 不再支援啟用 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 網際網路資訊服務 (IIS) 5.0 或更新版本。 您不需要在網頁伺服器上安裝 .NET Framework,但您必須註冊 WPF Multipurpose Internet Mail Extensions (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 的網頁進行通訊。 您可以藉由擷 HostScript 取 的 BrowserInteropHelper屬性來執行此動作。 這個屬性會傳回代表 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 網頁來啟動應用程式。 下列步驟說明如何檢查這兩項設定︰

  1. 在 Visual Studio 中,開啟專案屬性。

  2. 在 [安全性] 索引標籤上,按一下 [進階]

    [進階安全性設定] 對話方塊隨即出現。

  3. 請確定 [允許應用程式存取它的來源網站] 核取方塊已勾選,然後按一下 [確定]

  4. 在 [偵錯] 索引標籤上,選取 [瀏覽器起始 URL] 選項,並且指定包含 XBAP 之 HTML 網頁的 URL。

  5. 在 Internet Explorer 中,按一下 [工具] 按鈕,然後選取 [網際網路選項]

    [網際網路選項] 對話方塊隨即出現。

  6. 按一下 [進階] 索引標籤。

  7. 在 [安全性] 底下的 [設定]清單中,勾選 [允許檔案中的主動式內容在我的電腦上執行] 核取方塊。

  8. 按一下 [確定]

    變更在重新啟動 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 應用程式是在個別執行緒中執行。

  • MessageHook 無法引發 ,因為 HwndHost 無法在另一個線程或進程中執行的視窗子類別。

建立完全信任 XBAP

如果您的 XBAP 需要完全信任,您可以變更專案以啟用此權限。 下列步驟描述如何啟用完全信任︰

  1. 在 Visual Studio 中,開啟專案屬性。

  2. 在 [安全性] 索引標籤上,選取 [這是完全信任的應用程式] 選項。

這項設定會進行下列變更︰

  • 在專案檔中,<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 冷啟動時間可藉由在部署週期早期顯示 Unmanaged 進度頁面來緩和。 進度頁面幾乎是在應用程式啟動之後立即出現,因為它是由原生裝載程式碼顯示,並且以 HTML 轉譯。

此外,ClickOnce 下載序列的改善並行存取可改善最多 10% 的開始時間。 ClickOnce 下載並驗證指令清單之後,應用程式下載就會啟動,進度列會開始更新。

另請參閱