使用 system.windows.forms.browser 将 cookie 发送到 Web 应用程序
Send cookie to web application using system.windows.forms.browser
我有 windows 表格申请。
我必须通过浏览器控件创建新的 cookie 并将其发送到 Web 应用程序(通过其浏览器控件从 windows 表单应用程序创建并发送新的 cookie)。
此 winforms 应用程序仅显示一个正在等待所需 cookie 中的信息的 Web 应用程序。然后,此 Web 应用程序应根据此 cookie 的值做出一些决定。
我发现了这个:
Use cookies from CookieContainer in WebBrowser
但我想避免使用:
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
有什么想法吗?
我没有广泛测试这个解决方案,但它应该有效。我用静态页面试了一下,cookie 被正确添加了。
我所做的基本上是向文档中注入一个添加 cookie 的 Javascript 函数,然后立即调用它。
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
webBrowserControl.Navigate("file:///C:/Temp/span.html");
webBrowserControl.Navigated += webBrowserControl_Navigated;
}
void webBrowserControl_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
InjectCookieSetterScript();
}
private void InjectCookieSetterScript()
{
String script =
@"function setCookie()
{
document.cookie = ""myCookie=value;path=/"";
}";
InjectScript(script);
webBrowserControl.Document.InvokeScript("setCookie");
}
public void InjectScript(String scriptText)
{
var headElements = webBrowserControl.Document.GetElementsByTagName("head");
if (headElements.Count == 0)
{
throw new IndexOutOfRangeException("No element with tag 'head' has been found in the document");
}
var headElement = headElements[0];
var script = webBrowserControl.Document.CreateElement("script");
script.InnerHtml = scriptText; // "<script>" + scriptText + "</script>";
headElement.AppendChild(script);
}
}
我有 windows 表格申请。 我必须通过浏览器控件创建新的 cookie 并将其发送到 Web 应用程序(通过其浏览器控件从 windows 表单应用程序创建并发送新的 cookie)。
此 winforms 应用程序仅显示一个正在等待所需 cookie 中的信息的 Web 应用程序。然后,此 Web 应用程序应根据此 cookie 的值做出一些决定。
我发现了这个: Use cookies from CookieContainer in WebBrowser
但我想避免使用:
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
有什么想法吗?
我没有广泛测试这个解决方案,但它应该有效。我用静态页面试了一下,cookie 被正确添加了。
我所做的基本上是向文档中注入一个添加 cookie 的 Javascript 函数,然后立即调用它。
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
webBrowserControl.Navigate("file:///C:/Temp/span.html");
webBrowserControl.Navigated += webBrowserControl_Navigated;
}
void webBrowserControl_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
InjectCookieSetterScript();
}
private void InjectCookieSetterScript()
{
String script =
@"function setCookie()
{
document.cookie = ""myCookie=value;path=/"";
}";
InjectScript(script);
webBrowserControl.Document.InvokeScript("setCookie");
}
public void InjectScript(String scriptText)
{
var headElements = webBrowserControl.Document.GetElementsByTagName("head");
if (headElements.Count == 0)
{
throw new IndexOutOfRangeException("No element with tag 'head' has been found in the document");
}
var headElement = headElements[0];
var script = webBrowserControl.Document.CreateElement("script");
script.InnerHtml = scriptText; // "<script>" + scriptText + "</script>";
headElement.AppendChild(script);
}
}