让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
2014-03-12 10:41
549 查看
让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
大致说明:
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
2013-05-23 22:05 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
- QT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NETQT在ui文件上建立信号操机制会不会对后期维护产生影响 - love4Mario的专栏 - 博客频道 - CSDN.NET
- VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布 - Inchroy's Blog - 博客频道 - CSDN.NET
- QT发布中遇到的问题 - wufan的专栏 - 博客频道 - CSDN.NET
- 让lua支持base64和md5 - xu_ya_fei的专栏 - 博客频道 - CSDN.NET
- Build WebKit On Windows - 白果果白的专栏 - 博客频道 - CSDN.NET
- 用msvc2012编译QT 5.0.0-RC1 - BlueEngine的专栏 - 博客频道 - CSDN.NET
- linux几种快速清空文件内容的方法 - nanyun2010的专栏 - 博客频道 - CSDN.NET
- DOS日期和时间 - Robin Hu的专栏 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- V8 初次接触(Qt5) - 1+1=2 - 博客频道 - CSDN.NET
- Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET
- 让qtwebkit使用gstreamer - tinyle的专栏 - 博客频道 - CSDN.NET
- 谈谈‘请...’和‘Don't hesitate to ...’ - wuchunxiang的专栏 - 博客频道 - CSDN.NET
- Emacs基础命令整理 - Unplugged - 博客频道 - CSDN.NET
- 手动安装lzop压缩工具 - JerryMo06的专栏 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 小心 Spring MVC 使用陷阱 - MONKEYK - 博客频道 - CSDN.NET
- gethostbyname用法 - leesphone的专栏 - 博客频道 - CSDN.NET