环境:Cordova 2.9.0,iOS(运行iOS 6.1.3的Xcode 4.6.3 iPad 6.1模拟器和iPad 3)
我正在尝试将另一个文件加载到web-worker中。我加载的文件是应用程序的一部分(意味着它在同一个域中)。
以下代码在不在web-worker中运行时工作正常:( url 的格式为“/db/file.json”)
function loadXMLDoc(url, successCallback) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && (xmlhttp.status==200 || xmlhttp.status == 0)) {
successCallback(xmlhttp.responseText);
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
注意:使用cordova时, status 始终为0。不使用cordova时,状态为200。
当我将此代码分隔为Web工作者时,responseText将返回空白状态。
我删除了phoneGap,并确认上面的代码无论是否有网络工作者都可以使用。
是否可以在phoneGap / cordova中的网络工作者中使用XHR?
答案 0 :(得分:4)
您可能希望检查您的服务器是否正确支持跨源资源共享。 W3C为此提供了一些方便的资源,例如CORS Enabled。
当你在没有Cordova的情况下运行时,你可能实际上正在从服务器加载一个页面,例如http://www.myserver.com/index.html
,但是当你从Cordova运行它时,你实际上正在运行file:///somedirectory/www/index.html
。这意味着如果您尝试使用ajax请求来访问myserver.com
中的信息,则它位于不同的域中,如果设置不正确,浏览器将拒绝响应。
您可以做的最重要的事情是启用跨源资源共享。这需要添加新的标头Access-Control-Allow-Origin
,其值为*
答案 1 :(得分:0)
对于这种情况,您可以通过更改加载文件的方式来解决它。
file://
协议。var myJson = { "a":123,"b":789 };
<script src="db/file.json"></script>
console.log(myJson);
答案 2 :(得分:0)
是XHR适用于本地文件,其中包含cordova版本6.0.0(cordova-ios版本3.x) in workers ,默认iOS 9.2 UIWebView和(奇怪的)XMLHttpRequests适用于{{ 1}}协议(与其他所有浏览器不同)。 虽然我认为在所有的cordova实现中都是如此,但我还没有尝试过它们。如上所述file:
但status = 0
和{{1}处理程序触发并load
影响error
(xhr2)所有预期。遗憾的是,所有文件系统API都无法访问,因此这使得访问本地文件(related bug)的方式变得特殊/繁琐。
注意:尝试更新cordova-ios版本到4.0和WKWebView版本1.0.2-dev(仍然是cordova版本6.0)和responseType
网址不再有效。