让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET

让 QtWebkit 支持跨域CROS

450人阅读 评论(5) 收藏 举报
qtwebkit cross origi

最近公司的一个项目中,使用了QtWebkit来创建windows本地应用程序。

大致说明:

1》最外面的框架是一个QWebView加载一个index.html;

2》index.html内嵌若干个iframe,iframe的src有本地的html文件,也有网络上的html文件;

3》也就是说,整个软件的界面基本上都是用html/css/javascript来编写的;

4》在该项目中,使用了QtWebkit为index.html拓展了几个javascript方法(用C++拓展javascript的本地功能);

5》问题出现了:>>>跨域问题(CROS)

在QWebInspector中调试页面时,

1.当index.html中的javascript函数去调用网络上的页面的方法或操作网络上的页面的DOM,或者网络上的页面中的javascript方法去调用index.html中那些QtWebkit拓展的方法时,javascirpt控制台出现了红色的错误提示:

Unsafe JavaScript attempt to access frame with URL "http://some/iframe.html" from frame with URL "file/to/path/index.html"

2.当在本地index.html中用AJAX请求远程API的JSON数据时,控制台输出:

XMLHttpRequest cannot loadhttp://some/api?id=412311. Origin null is not allowed by Access-Control-Allow-Origin.

跨域问题CROS;

问题2的解决方法:

QWebView::settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);

OK!

注意:上面那行代码仅解决了本地的html文件跨域请求web上的数据,并不能解决web上的页面跨域请求另一个域上web数据,当然也有解决方法,那就是在api服务器的页面上加header:<?php header("Access-Control-Allow-Origin: *"); ?>,或者配置api服务器使其全局支持跨域操作。

问题1很棘手,问题1的解决方法:

谷歌、qt-project.org、百度,最后在谷歌搜索结果中得到答案:

https://bugs.webkit.org/attachment.cgi?id=65204&action=prettypatch

原因:

https://lists.webkit.org/pipermail/webkit-qt/2010-September/000828.html

这样一来,所有的跨域、unsafe javascript... 啥的问题都不在话下了。

另:

启动Chrome时加上--disable-web-security参数可以支持跨域,示例:

cmd>chrome.exe --disable-web-security,这样做只是为了方便调试界面。

让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET相关推荐

  1. springboot+Vue项目使用axios实现跨域(CROS)

    springboot+Vue项目使用axios实现(CROS)跨域 一.项目背景 二.跨域资源共享 CORS 详解 三.axios跨域实现 3.1 安装qs模块 3.2 axios使用 四.sprin ...

  2. java 跨域_springboot解决跨域CROS问题,用注解@CrossOrigin

    项目是springboot框架,前后端分离,需要跨域,当前前端可以用JSONP解决,但是java端如何解决呢? 因为是springboot框架,所以好多都可以用注解解决问题,所以就用到了@CrossO ...

  3. 用 nginx 代理 MailChimp API 并支持跨域

    tl;dr nginx 既灵活方便,又功能丰富,可以帮助我们实现添加跨域头.URL 重写以及隐藏敏感信息等功能.本文介绍在使用 MailChimp 进行邮件营销中遇到的一个普遍问题,分析了浏览器发起跨 ...

  4. Nginx配置服务器静态文件支持跨域访问

    2019独角兽企业重金招聘Python工程师标准>>> 在server中配置 add_header Access-Control-Allow-Origin *;add_header ...

  5. 同源策略_如何支持跨域

    欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 01 PART ...

  6. 两种可以支持跨域的方式 - 讲解篇

    针对项目:vue.js + Express 本例的vue.js项目使用Express框架作为后台数据服务端 什么叫做跨域? 通常情况下是指两个不在同一域名下的页面无法进行正常通行,或者无法获取其他域名 ...

  7. SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求

    SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求 现代浏览器处于安全的考虑,在http/https请求时必须遵守同源策略,否则即使跨域的http/https 请求, ...

  8. 如何判定API接口是否支持跨域访问

    1.背景 同一个h5页面需要访问多个不同的域名下的地址 2.判定方式 方式一 在浏览器控制台执行如下代码: var xhr = new XMLHttpRequest(); xhr.open('GET' ...

  9. js图片下载(支持跨域/解决Access-Control-Allow-Origin)

    一.思路 使用canvas绘制图片 使用toBlob方法将canvas图片转换为文件 使用a标签的download属性下载这个canvas转化生成的图片文件 canvas.toBlob() 将canv ...

最新文章

  1. windows共享使用linux生成的密钥
  2. 软件测试用例文档模板 简书,如何写出高质量的测试用例
  3. 【数据结构】量子危机
  4. 设计模式适配器模式_21世纪的设计模式:适配器模式
  5. Android之back键拦截处理
  6. ThinkPHP---RBAC
  7. SQL server 2005的复制(四)
  8. android sdk httppost,android6.0SDK 删除HttpClient的相关类的解决方法
  9. 线性回归和逻辑回归的区别_Spark实现线性回归与逻辑回归算法
  10. 用R和BioConductor进行基因芯片数据分析(三):计算median
  11. requests-get请求
  12. 计算机应用基础教材提纲,《计算机应用基础》课程教学大纲
  13. 有限域f9的特征是多少_密码学数学基本第十一讲有限域.ppt
  14. 51单片机之逻辑运算指令ANL、ORL、XRL等
  15. php 问卷调查,使用php问卷调查结果统计
  16. golang对比python
  17. 树莓派3B 安装 Raspbian 系统,配置环境
  18. MySQL性能优化的最佳20+条经验
  19. c++实现经典游戏——贪吃蛇
  20. 人生25句最美丽的名句

热门文章

  1. 关于IIS正在使用突然断电后,IIS不能使用解决方案
  2. Unicode编码问题,编程方面的技巧集合
  3. 基于的BCH的相关应用是不是该降降温?
  4. bzoj 1409 Password 矩阵快速幂+欧拉函数
  5. python 中type和object的关系
  6. Redis集群Twemproxy
  7. “领悟”的价值是什么?思维能力训练问答
  8. Java 必须掌握的 12 种 Spring 常用注解!
  9. Android 实现图片的单点缩放、拖动、旋转
  10. 深入Ajax架构和最佳实践读书笔记