首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# BHO 開發:如何取得網頁對話框中 iframe 內的元素資訊

     編輯:程式設計綜合問答

核心難點

IE BHO 中 IHTMLDocument2 僅代表主文檔,<iframe> 內容屬於獨立文檔上下文,需額外跨框架存取。

兩種主流方案

方案一:遍歷所有 iframe,逐個存取 contentWindow.document

IHTMLFramesCollection2 frames = (IHTMLFramesCollection2)doc.frames;
for (int i = 0; i < frames.length; i++) {
    var frameWindow = (IHTMLWindow2)frames.item(i);
    var frameDoc = (IHTMLDocument2)frameWindow.document;
    // 在 frameDoc 中查找元素
}

注意:跨域 iframe 會拋「存取被拒」,需 try-catch 忽略。

方案二:向每個 iframe 注入 JavaScript,由腳本回傳結果

string script = @"
    (function() {
        var els = document.querySelectorAll('your-selector');
        var result = [];
        for (var i=0;i<els.length;i++) result.push(els[i].outerHTML);
        return JSON.stringify(result);
    })();
";
object result = frameWindow.execScript(script, "JavaScript");
// 解析 JSON 字串

優點:繞過跨域限制(同源策略下同域可執行)、邏輯集中在 JS 端靈活。

建議

  • 優先方案一,簡單直接。
  • 遇到跨域或複雜 DOM 操作改用方案二。
  • 現代建議:改用 Chrome DevTools Protocol / Edge WebView2,BHO 技術棧已停止維護。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved