注:如果不是和pyqt/PySide2直接相关程序,请查阅其他解决方案。
问题描述:
1.环境:PySide2, Python3.6.8,arcgis JavaScript API 4.14。
2.现象:新建HTML和js文件,通过arcgis JavaScript API 调用basemap。直接用浏览器打开HTML,运行正常,但是通过PySide2的QWebEngineView调用时,会报出如下错误:
*** has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’
header is present on the requested resource. If an opaque response
serves your needs, set the request’s mode to ‘no-cors’ to fetch the
resource with CORS disabled.
3.解决方法:在实例化
self.browser=QWebEngineView()
之后,需要调用:
self.browser.page().settings().setAttribute(QWebEngineSettings.LocalContentCanAccessRemoteUrls, True)
其作用是:允许本地加载的文档忽略跨域规则,以便它们可以访问通常会被阻止的远程资源,因为所有远程资源都被视为本地文件的跨域。 禁用此设置(默认)后,仍然可以使用跨域规则阻止的远程访问。 请注意,禁用此设置不会阻止XMLHttpRequests或本地文件中的媒体元素访问远程内容。 基本上,它仅停止某些HTML子资源,例如脚本,因此禁用此设置不是安全机制。