让 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. js解决click事件点击事件间隔方法

    var myTimeout = null; $("#id").click(function(){ clearTimeout(myTimeout); myTimeout = setT ...

  2. 纯css3实现tab选项卡

    <!doctype html> <html> <head> <title>Welcome</title> <meta http-equ ...

  3. flush privileges是什么意思?

    flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里.MySQL用户数据和权限有修改后 ...

  4. 一个简单的php函数调用实例

    需求分析: funcs.php (这个文件,我们定义了一个函数) <?php //我们一个计算,+ - * / 的代码集合->函数 //1. function 是一个关键字 //2. ji ...

  5. how to install git 1.8 rpm

    git版本在低于1.8之前,对于私有项目会出现401的pull失败错误,只能通过升级git版本来解决 It appears that git18 is no longer available from ...

  6. Eclipse 修改编码格式

    在Eclipse的开发使用中,我们经常使用的是UTF-8,但是刚刚安装的或者是导入的项目是其他编码的默认是GBK的,这就造成我们的项目乱码,一些中文解析无法查看,对我们的开发造成不便. 修改工作空间默 ...

  7. Python中文显示问题

    默认pyhon使用ASCII码来解释程序的,默认不支持中文,需要在程序的第一行或者第二行声明编码. 官方解决方案:https://www.python.org/dev/peps/pep-0263/ T ...

  8. vb 添加状态栏

    1.新建一工程2.添加"部件" ms windows common controls 6.03.将StatusBar控件加至窗体中4.右键点击该控件,选"属性" ...

  9. 供应类型与计划分类一致性检查(PO)

    应用 Oracle   Purchasing 层 Level Function 函数名 Funcgtion Name CUXPOIMM 表单名 Form Name CUXPOIMM 说明 Descri ...

  10. JavaEE Tutorials (16) - Java消息服务概念

    16.1JMS API概述198 16.1.1什么是消息传送198 16.1.2什么是JMS API199 16.1.3何时使用JMS API199 16.1.4Java EE平台如何使用JMS AP ...