WPF應用程序我有一個WPF用戶控件承載使用WebBrowser控件的ASP.Net MVC應用程序。觸發事件,以接待來自WebBrowser控件
我想,當對WebApplication的執行一定的動作來通知用戶控件。 有什麼可能的方法來實現這個目標?
WPF應用程序我有一個WPF用戶控件承載使用WebBrowser控件的ASP.Net MVC應用程序。觸發事件,以接待來自WebBrowser控件
我想,當對WebApplication的執行一定的動作來通知用戶控件。 有什麼可能的方法來實現這個目標?
由於@SzabolcsDézsi在評論中提到,如果你有訪問Web應用程序可以使用WebBrowser.ObjectForScripting
,以實例的對象,並從JavaScript調用它的方法。下面是一個簡單的演示:
[ComVisible(true)] // Class must be ComVisible
public class Demo
{
public void SayHello(string name) => MessageBox.Show($"Hello {name} !!!");
}
創建這個類的一個實例,一個將其分配到WebBrowser控件的ObjectForScripting
屬性:
webBrowser.ObjectForScripting = new Demo();
,說我們在WebBrowser
控制顯示這個簡單的html頁面:
<html>
<head>
<title></title>
<script>
function sayhello()
{
var name = document.getElementById('name').value;
// the window.external is assigned an instance of
// class we created above.
// We can call C# instance method SayHello directly.
window.external.SayHello(name);
}
</script>
</head>
<body>
<form action="#" method="post">
<input id="name" type="text" name="name" value="" />
<input type="submit" name="submit" value="Say Hello" onclick="sayhello()" />
</form>
</body>
</html>
現在,只要填寫名稱並單擊SayHello按鈕,它就會按預期顯示MessageBox。
此外你的財產WebBrowser.Document
這是生活在Microsoft HTML對象庫(MSHTML)COM庫的HtmlDocument
一個實例,確保引用在您的項目。
文檔屬性,可以查詢當前頁面的DOM對象,並通過它,你可以通過由HtmlDocument
類像HtmlDocument.getElementById()
和許多其他暴露的方法處理JavaScript的HTML頁面等。
webBrowser.LoadCompleted += new LoadCompletedEventHandler((o, e) =>
{
if (webBrowser.Document is HTMLDocument DOM)
{
var namefield = DOM.getElementById("name");
namefield.setAttribute("value", "Enter your name!!!");
}
});
希望這有助於你理解WebBrowser
控制提供了操縱加載頁面的力量:
例如該代碼從上面頁面後html頁面修改名稱輸入的值屬性由WebBrowser控件加載。
這是一個非常好的解釋。試了一樣,像魅力一樣工作!謝謝! – user2143645
您可以修改ASP.NET應用程序?如果是的話,那麼你就可以在瀏覽器控件的'ObjectForScripting'屬性設置爲可以通過從JavaScript的網站通過'window.external'調用的類的實例。 –