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

2013-05-23 22:05 450人阅读 评论(5) 收藏 举报

最近公司的一个项目中,使用了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. webapi支持跨域访问

    写在前面 在实际应用中,跨域请求还是比较常见的,如何上接口直接支持跨域的访问呢? demo 场景项目A有个接口用来获取用户列表,现在项目b也有个功能需要加载用户列表.这两个项目在两个域名下,至少端口好 ...

  2. 使Web Api 支持跨域资源共享(CORS)

    Reference:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api Imp ...

  3. Asp.Net Web Api 接口,拥抱支持跨域访问。

    如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问. 由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题 ...

  4. SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域

    SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域 >>>>>>>>>>>> ...

  5. IIS配置支持跨域请求

    对于初次在IIS部署网站的同学,很容易忽略或不知道如何配置使其网站支持跨域请求,这里介绍一个最基础的方式,配置HTTP响应标头. 在IIS上选择HTTP响应标头,选择添加自定义响应标头,通常我们会添加 ...

  6. SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域[转]

    SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域 原文地址:https://www.cnblogs.com/fanshuyao/p/716847 ...

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

    在server中配置 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Reque ...

  8. Java Web应用中支持跨域请求

    转载:https://blog.csdn.net/lmy86263/article/details/51724221 由于工程合作开发的需要,后台的应用要能支持跨域访问,但是在这个跨域访问“时好时坏” ...

  9. nginx:支持跨域访问

    在http节点中配置: #支持跨域访问 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Header ...

随机推荐

  1. phpcms-v9 --- 如何通过{pc}标签获取全站文章内容?

    1.phpcms-v9默认情况下只能根据catid获取当前栏目及子栏目下的文章,但是有时候我们需要如何通过{pc}标签来获取全站文章内容的需求,应该怎么做呢? 第一步:在content_tag.cla ...

  2. js 删除本身节点元素

    var theParent = document.getElementById("bq_ly");   theParent.parentNode.removeChild(thePa ...

  3. Mac Please try running this command again as root/Administrator.

    mac 终端安装程序,需要权限,出现以下提示语句: Please try running this command again as root/Administrator. 需要执行以下命令即可: s ...

  4. jquery鼠标滑过展示图片时显示详情

    jquery: <script src="js/jquery.js" type="text/javascript"></script> ...

  5. Android IT资讯网络阅读器应用源码

    这个是Android IT资讯网络阅读器应用,也是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心 ...

  6. Case when 的用法,简单Case函数

    Case when 的用法,简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result ...

  7. c++ 关于类构造函数的初始化列表

    除了性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重 ...

  8. 07.31 zepto

    tag事件 viewport标签 flexbox弹性布局 响应式布局 rem 交互优化 touchstart touchend 高清图片 1px  单文本溢出  多文本溢出

  9. Trailing Zeroes (III)(lightoj 二分好题)

    1138 - Trailing Zeroes (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit:  ...

  10. poj2728 Desert King --- 01分数规划 二分水果。。

    这题数据量较大.普通的求MST是会超时的. d[i]=cost[i]-ans*dis[0][i] 据此二分. 但此题用Dinkelbach迭代更好 #include<cstdio> #in ...