我确信之前一定已经回答过这个问题,但我找不到解决方案,所以我想我可能误解了其他人的解决方案或试图做一些愚蠢的事情,但我们开始了。
我正在用 C# 编写 Outlook 2010 的加载项,用户可以单击功能区中的按钮并将电子邮件内容提交到网站。当他们单击该按钮时,网站应该在默认浏览器中打开,从而允许他们查看刚刚提交的内容并在网站上与之交互。我可以使用 URL 中的查询字符串来执行此操作:
System.Diagnostics.Process.Start("http://www.test.com?something=value");
但可提交的数据量的限制和混乱的 URL 阻碍了我采用这种方法。我想为此使用 HTTP POST,因为它显然更合适。但是,我找到的执行此操作的方法似乎在提交帖子数据后不会在浏览器中打开页面:
http://msdn.microsoft.com/en-us/library/debx8sh9.aspx http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
总结;用户需要能够单击 Outlook 功能区中的按钮,打开 Web 浏览器并显示通过 POST 提交的电子邮件的内容。
EDIT:
是的,我找到了一种方法,虽然很丑陋,但很有效!只需创建一个临时 .html 文件(然后按上述方式启动),其中包含一个包含所有数据隐藏字段的表单,并使用 JavaScript 在页面加载时提交该文件。
我不太喜欢这个解决方案,因为它依赖于 JavaScript(我有一个<noscript>
提交按钮以防万一)似乎有点困难,所以我仍然真的希望这里有人能想出更好的东西。
虽然晚了八年,但这里有一些代码很好地说明了这个过程:
string tempHTMLLocation = "some_arbitrary_location" + "/temp.html";
string url = https://your_desired_url.com";
// create the temporary html file
using (FileStream fs = new FileStream(tempHTMLLocation, FileMode.Create)) {
using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8)) {
w.WriteLine("<body onload=\"goToLink()\">");
w.WriteLine("<form id=\"form\" method=\"POST\" action=\"" + url + "\">");
w.WriteLine("<input type=\"hidden\" name=\"post1\" value=\"" + post_data1 + "\">");
w.WriteLine("<input type=\"hidden\" name=\"post2\" value=\"" + post_data2 + "\">");
w.WriteLine("</form>");
w.WriteLine("<script> function goToLink() { document.getElementById(\"form\").submit(); } </script>");
w.WriteLine("</body>");
}
}
// launch the temp html file
var launchProcess = new ProcessStartInfo {
FileName = tempHTMLLocation,
UseShellExecute = true
};
Process.Start(launchProcess);
// delete temp file but add delay so that Process has time to open file
Task.Delay(1500).ContinueWith(t=> File.Delete(tempHTMLLocation));
打开页面后,onload() JS 脚本立即提交表单,该表单将数据发布到 url 并在默认浏览器中打开它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)