我想創建一個類,當我創建它的一個實例,然後它將有一個Web瀏覽器控件,我可以與之交互。當我在主窗體中創建瀏覽器控件時,我的代碼工作正常,但是當我嘗試將它抽象到它自己的類時,我並不理解winforms的工作方式。我猜測我需要繼承或者初始化它,但我不確定。如何在單獨的類中創建Web瀏覽器控件?
下面是類代碼:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class MyBrowserFuncs
{
public WebBrowser WB;
public MyBrowserFuncs()
{
WB = new WebBrowser();
WB.ObjectForScripting = this;
WB.Navigate("mypage.html");
}
public string Test(string msg)
{
return WB.Document.InvokeScript
("Test", new String[] { msg });
}
}
這裏是上的mypage.html
function Test(msg)
{
alert(msg);
return "success";
}
相應的JavaScript這裏是我怎麼想它調用C#
private void btnSomething_Click(object sender, EventArgs e)
{
var web = new MyBrowserFuncs();
var text = web.Test("this is a message");
}
我沒有得到任何錯誤,但它不起作用。它在主表單中使用代碼時有效。我猜測這可能與InitializeComponent();
有關,但我並不是100%確定如何創建和處理控件,當我不需要它們可見並想將它們抽象爲一個類時。
我在做什麼錯?
如果您沒有以任何形式顯示網絡瀏覽器,應該在哪裏顯示警報?你需要將它附加到表單的某個地方。如果你只是想要一個工具來運行JavaScript,那裏有庫讓你從.NET運行JS,就像https://github.com/JavascriptNet/Javascript.Net –
試過javascript解釋器,但是我正在與之交互的API失敗如果它不能與DOM交互,那麼我正在使用無頭瀏覽器。如果我刪除警報並返回值,它仍然不起作用。我希望能夠創建可變數量的隱藏瀏覽器控件。我怎樣才能將它重新添加到表單中? – Guerrilla
此外,在我沒有將它添加到實際窗體的代碼中,我剛剛將它聲明爲窗體類中的一個屬性,並且警報工作,即使實際上沒有窗體上的Web瀏覽器控件 – Guerrilla