首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# WinForm 整合 WebKit 實現雙向 JS 互呼叫完整指南

     編輯:關於C語言

背景與痛點

專案原使用 WebBrowser (IE 內核) 並透過 ObjectForScripting 暴露 .NET 物件給 JavaScript 呼叫:

wb.ObjectForScripting = new MyClass();

標記 [ComVisible(true)] 後,前端即可 window.external.Test()。但目標網站對 IE 相容性極差,需尋找替代內核。

替代方案評估

元件引擎JS 物件傳遞支援
GeckoFxFirefox Gecko文檔缺乏、難以實作
WebKit.NETWebKit無內建 API
open-webkit-sharpWebKit (二次封裝)提供 ScriptObject

最終選擇 open-webkit-sharp。

環境部署步驟

  1. 下載專案,將 Core 與 References 資料夾複製至專案目錄。
  2. 依目標框架引用對應 DLL:
    • .NET 2.0/3.5 → Binary_NET2
    • .NET 4.0+ → Binary
  3. 工具箱加入 OpenWebKitSharp.dll,拖曳 WebKitBrowser 至表單。
  4. 安裝必要執行元件:
    • Microsoft Visual C++ 2005 Redistributable
    • Apple QuickTime (可選,增強 HTML5 支援)

核心程式碼:傳遞 .NET 物件給 JS

private void Form1_Load(object sender, EventArgs e)
{
    this.webKitBrowser1.Navigate("https://your-site.com");
    this.webKitBrowser1.DocumentCompleted += WebKitBrowser1_DocumentCompleted;
}

void WebKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // 關鍵:透過 ScriptManager 暴露物件
    this.webKitBrowser1.GetScriptManager.ScriptObject = new MyClass();
}

前端呼叫方式

與 IE 相同,使用 window.external:

window.external.Test();

若想自訂名稱,可在載入完成後注入:

this.webKitBrowser1.GetScriptManager.EvaluateScript("var myObj = window.external;");

之後前端即可 myObj.Test()。

避坑指南

  • 確保 MyClass 標記 [ComVisible(true)] 且為 public。
  • 若遇到「找不到 DLL」錯誤,檢查 Core 資料夾是否隨輸出目錄複製。
  • 網站若使用 HTTPS,需確認 WebKit 版本支援對應 TLS 版本。

結語

open-webkit-sharp 雖文檔較少,但成功解決了 IE 相容性與 JS 互呼叫的雙重需求。若有更佳方案歡迎交流。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved