Cordova:如何诊断ajax不适用于UWP(Windows应用商店)应用程序

Cordova:如何诊断ajax不适用于UWP(Windows应用商店)应用程序,第1张

概述我有一个简单的Cordova应用程序,在构建时,作为 Windows UWP应用程序运行时,ajax调用在某种程度上被阻止了我的工作网络. 我以前曾多次问过这个问题,但是想过会试着改写,因为从来没有得到任何解决方案. 应用程序ajax调用在我的家用机器上工作正常,或者什么似乎是大多数其他网络.当它工作时,我可以看到Wireshark中的所有输出 当我的工作机器连接到我们的工作网络时,我在Wires 我有一个简单的Cordova应用程序,在构建时,作为 Windows UWP应用程序运行时,AJAX调用在某种程度上被阻止了我的工作网络.

我以前曾多次问过这个问题,但是想过会试着改写,因为从来没有得到任何解决方案.

应用程序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应用商店)应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存