2009-12-16 16 views
20

Nếu bạn có IE8, bạn có thể nhận thấy một tính năng thực sự tiện dụng mà MS đã thêm vào. Nhấn F12 và Công cụ dành cho nhà phát triển, một con bọ lửa như trình gỡ lỗi, bật lên. Điều này là cực kỳ hữu ích cho mục đích gỡ lỗi, và tôi tự hỏi nếu có một cách để bật lên Developer Tools từ một điều khiển WebBrowser bên trong một ứng dụng .NET.Có cách nào để kích hoạt các công cụ phát triển IE8 từ bên trong điều khiển WebBrowser trong ứng dụng .NET

Tình huống của tôi là: Tôi có ứng dụng C# có điều khiển WebBrowser được nhúng. Ứng dụng C# và nội dung trình duyệt web DHTML giao tiếp với nhau bằng giao diện ObjectForScripting (C# side) và window.external (DHTML), vì vậy để kiểm tra/gỡ lỗi/gỡ rối chức năng đầy đủ, tôi cần một cách để kích hoạt Nhà phát triển Các công cụ từ bên trong điều khiển WebBrowser. Đến nay chúng tôi đã bị giới hạn sử dụng Firebug Lite bị hạn chế nghiêm trọng hoặc kích hoạt một phiên gỡ rối bước của javascript bằng cách sử dụng 'trình gỡ lỗi'; js, nhưng bây giờ chúng tôi đang đi đến điểm mà các tùy chọn trở thành một rắc rối thực sự và không cho phép các tính năng đầy đủ mà chúng tôi sẽ nhận được ra khỏi việc có một cái gì đó như Firebug hoặc Công cụ phát triển theo ý của chúng tôi.

Điều tôi thực sự thích làm là có thể bật Công cụ dành cho nhà phát triển từ bên trong điều khiển WebBrowser của tôi trong khi ứng dụng đang chạy, nhưng tôi chưa tìm được cách để thực hiện điều này.

Có ai khác đã gặp sự cố này và phát hiện ra liệu có cách nào để thực hiện điều đó không?

+0

Tôi rất nghi ngờ điều đó. –

+0

tôi sợ rằng –

Trả lời

12

Không, như những người khác đã nói điều này là không thể. Tuy nhiên có một cách bạn có thể dây hầu hết các lỗi cửa sổ thông qua một trình xử lý tùy chỉnh. Khi tài liệu đã tải xong, bạn có thể đính kèm một người nghe vào cửa sổ. ví dụ.

webBrowser.DocumentCompleted += (o, e) => 
{ 
    webBrowser.Document.Window.Error += (w, we) => 
    { 
     we.Handled = true; 

     // Do something with the error... 
     Debug.WriteLine(
      string.Format(
       "Error: {1}\nline: {0}\nurl: {2}", 
       we.LineNumber, //#0 
       we.Description, //#1 
       we.Url)); //#2 
    }; 
}; 
+1

btw, điều này chỉ hoạt động với điều khiển WinForms WebBrowser, không phải WPF – casaout

+0

@casaout - bạn sẽ có thể sử dụng sự kiện 'LoadCompleted' và sau đó truy cập đối tượng Window. FWIW không có "trình duyệt WPF", nó vẫn là điều khiển ActiveX WebBrowser gốc. – Fraser

3

Tôi tin rằng các công cụ dành cho nhà phát triển được triển khai trong máy chủ IE (iexplore.exe), không phải trong chính MSHTML. Rõ ràng là các móc là có cho nó, nhưng tôi không nghĩ rằng bạn có thể nhận được để giao diện người dùng và các công cụ từ kiểm soát.

3

Không có cách nào để các máy chủ nhúng sử dụng các công cụ nhà phát triển tích hợp sẵn. Nhưng nếu bạn muốn gỡ lỗi, bạn vẫn có thể, bạn có thể đính kèm trực quan studio/windbg vào ứng dụng của bạn, tồi tệ hơn bạn có thể chèn điểm ngắt với từ khóa "trình gỡ lỗi". Trong VS, bạn có thể phải chọn tập lệnh từ menu "chọn ..." trong "gỡ lỗi các loại mã này".

1

Một lựa chọn là để mở một cửa sổ con từ trang nhúng, cửa sổ con sẽ mở ra trong trình duyệt IE và các công cụ cho nhà phát triển làm việc, sau đó bạn có thể làm

window.opener 

trong giao diện điều khiển để tham khảo cha mẹ và thao tác trang.

Hoặc thay thế bảng điều khiển dành cho cha mẹ bằng con và chuyển hướng đến nó.

var logWindow = window.open(); 
     logWindow.document.write('<html><head><title>Child Log Window</title></head>\x3Cscript>window.opener.console = console;\x3C/script><body><h1>Child Log Window</h1></body></html>'); 
     window.onunload = function() { 
      if (logWindow && !logWindow.closed) { 
       logWindow.close(); 
      } 
     }; 
Các vấn đề liên quan