winfrom 嵌套本地页面后无法走接口。提示跨域的问题。

风吹裤衩轻飞扬丶 2019-01-12 04:19:55
建了个测试项目。
用winfrom里的webBrowser套了项目里的一个登陆页。但是套了后运行提示 rom origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.


百度了下好像是跨域的什么问题。

有没有大佬晓得的。




private void Form1_Load(object sender, EventArgs e)
{
string Url = Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\"));
Url = Url.Substring(0, Url.LastIndexOf("\\")) + "\\Login.html";
this.webBrowser1.Url = new Uri(Url);
}




<script type="text/javascript">
function Login() {
var Name = $("#Name").val();
if (Name=="") {
layer.msg('请输入账号!');
return;
}
var Pwd = $("#Pwd").val();
if (Pwd == "") {
layer.msg('请输入密码!');
return;
}

$.ajax({
type: 'get',
url: 'Handler/Logins',
dataType: 'json',
data: { Name: Name, Pwd: Pwd},
success: function (data) {
if (data.type == 1) {
window.location.href = "Index.html";
} else {
layer.msg(data.message);
}
},
error: function (xhr, type) {
layer.msg("请求错误,请稍后在试!");
}

});

}
</script>

<body class="loginBg">
<div class="login">
<img class="baiselogo" src="img/baiselogo.png">
<div class="loginItem flex flexAIC">
<img src="img/zh.png">
<input id="Name" class="flexf" type="text" placeholder="请输入账号" />
</div>
<div class="loginItem flex flexAIC">
<img src="img/mm.png">
<input id="Pwd" class="flexf" type="password" placeholder="请输入密码" />
</div>
<div onclick="Login()" class="loginBtn flex flexAIC flexJSB">
进入<img src="img/jinru.png">
</div>
</div>
</body>

...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
基本上从成熟、方便、绝对可靠角度,我倾向于两种方案:html/js 与 c# 代码互操作方案、远程windows service 服务进行消息中转方案。 实现了 html 与 c# 互操作方案依赖于具体的潜入 web浏览器插件的功能。但是它通常就是一个注册函数的事情,浏览器插件支持你将一个委托注册给插件,然后 js 就可以直接调用这个对应明程的 js 函数,这样 js 就能调用 c# 方法。所以如果有,那么它就比较简单。 实现了服务消息中转方案,那么你就实现了一个双向推送功能,可以说是一个技术战略上的飞跃。
  • 打赏
  • 举报
回复
引用 3 楼 风吹裤衩轻飞扬丶 的回复:
但是牵扯到打印吖。又必须用winfrom里面的方法。肿么办。
这和打印没有什么关系。webbrowser 启动的网站可以是远程网站,webbrowser 可以支持 html/js 与 c# 互操作,也就是说不但你的 c# 代码可以调用 js,网页上的 js 可以调用到当前承载着 webbrowser 的你的 c# 方法,是互操作的。 其它的可嵌入的浏览器组件,或多或少也都支持这种互操作功能! 或者你还可以用你的 winform 程序开启本地 websocket 服务,然后你的网页访问 ws;//localhost:端口号 这类本地服务。 你还可以让你的 winform 双向访问远程 windows service 服务,这样你的网页就可以通过远程服务端来推送消息到你的 winform 程序(此时其实网页又可以跟 winform 分离,网页上的操作可以把消息推送给任意一个 winform 进程)。 你还可以使用 protocol 协议来(在当前页面或者 js 打开另外一个临时虚拟 <form>)让网页来调起本地的继承。例如网页能打开QQ,就是因为之前的QQ客户端在本地注册表注册了 protolcol 地址,这样网页就能直接(带参数)调用 QQ 进程了,从而可以通知本地进程。 还有其它方法。例如坑爹地经常诡异崩溃的 ActiveX方式,网页通过它可以跨进程跟本地 winform 进程通讯。
  • 打赏
  • 举报
回复
jQuery 跨域访问需要在浏览器端调用一下jQuery的 support.cors 设置。 但是看你的代码,你并没访问其他域的服务啊?你的 'Handler/Logins' 这类是不是本地地址?
  • 打赏
  • 举报
回复
引用 2 楼 小疯纸纸 的回复:
没你这么搞的,把页面建立到WEB项目上发布到IIS,然后winform的webBrowser再嵌入这个地址就好了
但是牵扯到打印吖。又必须用winfrom里面的方法。肿么办。
  • 打赏
  • 举报
回复
没你这么搞的,把页面建立到WEB项目上发布到IIS,然后winform的webBrowser再嵌入这个地址就好了
  • 打赏
  • 举报
回复
项目路径。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧