我以前曾多次问过这个问题,但是想过会试着改写,因为从来没有得到任何解决方案.
应用程序AJAX调用在我的家用机器上工作正常,或者什么似乎是大多数其他网络.当它工作时,我可以看到Wireshark中的所有输出
当我的工作机器连接到我们的工作网络时,我在Wireshark中看不到任何东西.如果我指向在localhost上运行的服务器,该应用程序确实有效(但我在Wireshark中看不到任何内容,但这可能是因为它是localhost)
如果我在UWP容器之外运行应用程序,即我只是在同一台机器上运行,在同一个网络上运行,但是通过桌面浏览器运行(就像你为Cordova调试一样),它也可以运行.
所以它甚至在它进入网络之前就被阻止了,因为我们根本看不到Wireshark,所以这排除了主机无法访问,CORS等,因为它甚至没有被发送到服务器.
我可以通过Visual Studio在调试中运行它,并运行以下测试代码…
document.addEventListener('deviceready',callUrl,false);function callUrl() { console.log('callUrl'); var xhr = new XMLhttpRequest(); xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. console.log(xhr.readyState); if (xhr.readyState === DONE) { if (xhr.status === OK) console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } xhr.open('GET','https://httpbin.org/get'); xhr.send(null);
};
onreadystatechangeis调用两次,xhr.readyState前2然后4.
状态始终为0.
我怎样才能诊断阻塞这个的是什么?我完全不知道.这是低级别的东西,但怎么看?我也浏览了windows事件日志,但什么都找不到.
AJAX调用只返回0,带有空白描述.我们的网络管理员只是说我的应用程序有问题(我尝试了多个Cordova应用程序,包括基本的测试应用程序)
在此先感谢您的帮助.
[EDIT1]
为了回应@XavIEr的评论,我在AppxManifest.xml中的所有内容(我从我构建的.appxupload文件中提取的)都是
<CapabilitIEs> <Capability name="internetClIEnt" /> </CapabilitIEs>
有一些关于here功能的文档,我们有以下内容(位于页面底部).
The following capabilitIEs are unavailable when deploying your Remote Mode application to the windows Store: Enterprise Authentication (enterpriseAuthentication) Shared User Certificates (sharedUserCertificates) documents library (documentslibrary) Music library (musiclibrary) Pictures library (pictureslibrary) VIDeos library (vIDeoslibrary) Removable Storage (removableStorage) Internet clIEnt/server (internetClIEntServer) - note that internetClIEnt is still permitted Private network clIEnt/server (privateNetworkClIEntServer)
我不确定我们是否在Visual Studio(config.xml)中设置了这些,但上面似乎也说这些中的一些不能使用?
internetClIEnt应该足够吗(我只想作为客户端呼叫服务器,而不是充当服务器).
此外,这似乎足以在大多数网络上工作,除了我的工作..
[EDIT2]
回应关于CSP的回复……
有关此here的讨论.我在Visual Studio中创建的测试Cordova应用程序确实具有以下功能:
<Meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
令人惊讶的是,我没有在我的Ionic index.HTML中看到这一点,但也许这是因为它使用的是白名单插件?
我的Ionic应用程序在config.xml中有以下内容
<access origin="*" /> <allow-intent href="http://*/*" /> <allow-intent href="https://*/*" /> <allow-intent href="tel:*" /> <allow-intent href="sms:*" /> <allow-intent href="mailto:*" /> <allow-intent href="geo:*" /> <allow-navigation href="http://localhost:8080/*" /> .... <plugin name="cordova-plugin-whiteList" spec="^1.3.1" />
如果AJAX甚至有一些错误说它与CSP有关,那将是很好的,如果它就是这样,但我们什么都没得到.
再一次,这个问题只出现在我的工作网络上(无论是有线还是我们的WIFI),这很奇怪.如果我在另一个连接上运行确切的机器(例如Surface平板电脑)(例如将它连接到我的手机电池),那么一切都按预期工作.所以它必须是与网络(或防火墙可能)有关的一些设置,我也觉得奇怪,因为我至少会在Wireshark中看到一些东西.
很高兴能够“调试”AJAX调用,并查看它失败的地方.
[编辑3]
阅读其中一条评论后,我用小提琴手看看我能看到什么,我做了……
它甚至报告200(这是不正确的),我的请求仍然失败.
解决方法 根据 this,您需要请求privateNetworkClIEntServer功能才能与本地网络通信.请注意,此功能仅在您的应用程序配置为local mode时才有效(如果在远程模式下使用此功能,您的应用程序将从商店中被拒绝).
要启用本地模式,您需要设置< preference name =“windowsDefaultUriPrefix”value =“ms-appx://”/>在你的cordova config.xml中.
请注意,本地模式可能会导致其他问题,因为您无法使用例如本地模式下的内联脚本(CSP违规)
总结以上是内存溢出为你收集整理的Cordova:如何诊断ajax不适用于UWP(Windows应用商店)应用程序全部内容,希望文章能够帮你解决Cordova:如何诊断ajax不适用于UWP(Windows应用商店)应用程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)