WebBrowser 跨域之间访问的方法
项目需要,本地静态页访问远程页面,然后远程页面反过来调用本地页面。这样在浏览器中是不可以实现的,只有 ie 5 调低了安全级别才可以。在一个 winform 程序中,可以用 webbrowser来实现。
代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Web;
namespace SetLocalPath
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//string href = string.Empty;
private void button1_Click(object sender, EventArgs e)
{
//HtmlElement middlecenter = webBrowser1.Document.All["smile"];
//middlecenter.SetAttribute("src", "e:\\pdm.jpg");
//webBrowser1.Document.Links[0].SetAttribute("href", "F:\\TestWebSite\\index.html");
}
void link_Click(object sender, HtmlElementEventArgs e)
{
HtmlElement archor = (HtmlElement)sender;
string url = archor.GetAttribute("href");
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType == "html" || fileType == "htm")
{
url = url.Replace("//", "\\");
}
webBrowser1.Navigate(url);
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
string url = e.Url.ToString();
if (lastNavigate != url && !isFirstTime && url.IndexOf("javascript") == -1)
{
lastNavigate = url;
url = System.Web.HttpUtility.UrlDecode(url, Encoding.GetEncoding("utf-8")); // 转一次编码,将 %3 转为 ?
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType.IndexOf('?') > -1)
{
fileType = fileType.Substring(0, fileType.IndexOf('?'));
}
if (fileType == "html" || fileType == "htm")
{
//url = ConfigurationManager.AppSettings["localfile"].ToString() + "\\" + url.Substring(url.LastIndexOf('\\') + 1);
if (url.StartsWith("http"))
{
url = ConfigurationManager.AppSettings["localfile"].ToString().TrimEnd(new char[] { '\\', '/' }) + "\\" +
url.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = url.Replace("file:///", "").Replace("/", "\\");
}
//url = url.Replace("/", "\\");
}
else if (fileType == "aspx")
{
if (url.StartsWith("file"))
{
url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" +
url.Replace("file:///", "").Replace(ConfigurationManager.AppSettings["localfile"].ToString().Replace('\\', '/').TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = System.Text.RegularExpressions.Regex.Replace(url,
"http://([^.]+)/", ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/");
}
lastNavigate = url;
//url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" + currPage.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }), "");
}
//lastNavigate = url;
this.webBrowser1.Navigate(url);
}
// 尝试
currPage = e.Url.ToString();
if (isFirstTime)
{
lastNavigate = url;
isFirstTime = false;
}
}
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//this.webBrowser1.Navigate("F:\\TestWebSite\\index.html");
//string url = e.Url.ToString();
//string fileType = url.Substring(url.LastIndexOf('.') + 1);
//if (fileType == "html" || fileType == "htm")
//{
// this.webBrowser1.Navigate(url);
//}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)
{
foreach (HtmlElement archor in this.webBrowser1.Document.Links)
{
archor.SetAttribute("target", "_self");
//archor.Click += new HtmlElementEventHandler(link_Click);
}
foreach (HtmlElement form in this.webBrowser1.Document.Forms)
{
form.SetAttribute("target", "_self");
}
//HtmlElement link = webBrowser1.Document.All["linktest"];
//href = link.GetAttribute("href");
//link.Click += new HtmlElementEventHandler(link_Click);
}
string lastNavigate = string.Empty;
string prepre = string.Empty;
string currPage = string.Empty;
bool isFirstTime = true;
private void webBrowser1_Navigated_1(object sender, WebBrowserNavigatedEventArgs e)
{
string url = e.Url.ToString();
if (currPage != url && !isFirstTime)
{
url = System.Web.HttpUtility.UrlDecode(url, Encoding.GetEncoding("utf-8")); // 转一次编码,将 %3 转为 ?
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType.IndexOf('?') > -1)
{
fileType = fileType.Substring(0, fileType.IndexOf('?'));
}
if (fileType == "html" || fileType == "htm")
{
if (url.StartsWith("http"))
{
url = ConfigurationManager.AppSettings["localfile"].ToString().TrimEnd(new char[] { '\\', '/' }) + "\\" +
url.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }), "");
}
else
{
url = url.Replace("file:///", "").Replace("/", "\\");
}
}
else if (fileType == "aspx")
{
if (url.StartsWith("file"))
{
url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" +
url.Replace("file:///", "").Replace(ConfigurationManager.AppSettings["localfile"].ToString().Replace('\\', '/').TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = System.Text.RegularExpressions.Regex.Replace(url,
"http://([^.]+)/", ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/");
}
}
lastNavigate = url;
this.webBrowser1.Navigate(url);
}
if (isFirstTime)
{
lastNavigate = url;
isFirstTime = false;
}
//应该是跳转的页面,而不是 当前的
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Web;
namespace SetLocalPath
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//string href = string.Empty;
private void button1_Click(object sender, EventArgs e)
{
//HtmlElement middlecenter = webBrowser1.Document.All["smile"];
//middlecenter.SetAttribute("src", "e:\\pdm.jpg");
//webBrowser1.Document.Links[0].SetAttribute("href", "F:\\TestWebSite\\index.html");
}
void link_Click(object sender, HtmlElementEventArgs e)
{
HtmlElement archor = (HtmlElement)sender;
string url = archor.GetAttribute("href");
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType == "html" || fileType == "htm")
{
url = url.Replace("//", "\\");
}
webBrowser1.Navigate(url);
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
string url = e.Url.ToString();
if (lastNavigate != url && !isFirstTime && url.IndexOf("javascript") == -1)
{
lastNavigate = url;
url = System.Web.HttpUtility.UrlDecode(url, Encoding.GetEncoding("utf-8")); // 转一次编码,将 %3 转为 ?
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType.IndexOf('?') > -1)
{
fileType = fileType.Substring(0, fileType.IndexOf('?'));
}
if (fileType == "html" || fileType == "htm")
{
//url = ConfigurationManager.AppSettings["localfile"].ToString() + "\\" + url.Substring(url.LastIndexOf('\\') + 1);
if (url.StartsWith("http"))
{
url = ConfigurationManager.AppSettings["localfile"].ToString().TrimEnd(new char[] { '\\', '/' }) + "\\" +
url.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = url.Replace("file:///", "").Replace("/", "\\");
}
//url = url.Replace("/", "\\");
}
else if (fileType == "aspx")
{
if (url.StartsWith("file"))
{
url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" +
url.Replace("file:///", "").Replace(ConfigurationManager.AppSettings["localfile"].ToString().Replace('\\', '/').TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = System.Text.RegularExpressions.Regex.Replace(url,
"http://([^.]+)/", ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/");
}
lastNavigate = url;
//url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" + currPage.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }), "");
}
//lastNavigate = url;
this.webBrowser1.Navigate(url);
}
// 尝试
currPage = e.Url.ToString();
if (isFirstTime)
{
lastNavigate = url;
isFirstTime = false;
}
}
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//this.webBrowser1.Navigate("F:\\TestWebSite\\index.html");
//string url = e.Url.ToString();
//string fileType = url.Substring(url.LastIndexOf('.') + 1);
//if (fileType == "html" || fileType == "htm")
//{
// this.webBrowser1.Navigate(url);
//}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)
{
foreach (HtmlElement archor in this.webBrowser1.Document.Links)
{
archor.SetAttribute("target", "_self");
//archor.Click += new HtmlElementEventHandler(link_Click);
}
foreach (HtmlElement form in this.webBrowser1.Document.Forms)
{
form.SetAttribute("target", "_self");
}
//HtmlElement link = webBrowser1.Document.All["linktest"];
//href = link.GetAttribute("href");
//link.Click += new HtmlElementEventHandler(link_Click);
}
string lastNavigate = string.Empty;
string prepre = string.Empty;
string currPage = string.Empty;
bool isFirstTime = true;
private void webBrowser1_Navigated_1(object sender, WebBrowserNavigatedEventArgs e)
{
string url = e.Url.ToString();
if (currPage != url && !isFirstTime)
{
url = System.Web.HttpUtility.UrlDecode(url, Encoding.GetEncoding("utf-8")); // 转一次编码,将 %3 转为 ?
string fileType = url.Substring(url.LastIndexOf('.') + 1);
if (fileType.IndexOf('?') > -1)
{
fileType = fileType.Substring(0, fileType.IndexOf('?'));
}
if (fileType == "html" || fileType == "htm")
{
if (url.StartsWith("http"))
{
url = ConfigurationManager.AppSettings["localfile"].ToString().TrimEnd(new char[] { '\\', '/' }) + "\\" +
url.Replace(ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }), "");
}
else
{
url = url.Replace("file:///", "").Replace("/", "\\");
}
}
else if (fileType == "aspx")
{
if (url.StartsWith("file"))
{
url = ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/" +
url.Replace("file:///", "").Replace(ConfigurationManager.AppSettings["localfile"].ToString().Replace('\\', '/').TrimEnd(new char[] { '\\', '/' }) + "/", "");
}
else
{
url = System.Text.RegularExpressions.Regex.Replace(url,
"http://([^.]+)/", ConfigurationManager.AppSettings["remote"].ToString().TrimEnd(new char[] { '\\', '/' }) + "/");
}
}
lastNavigate = url;
this.webBrowser1.Navigate(url);
}
if (isFirstTime)
{
lastNavigate = url;
isFirstTime = false;
}
//应该是跳转的页面,而不是 当前的
}
}
}
走向地狱的途中,不小心走了程序员这条路,路上一个个黑心的老板,和暗无天日的加班,我才发现,通往地狱的路径中,我们这行是最短的。