如何防止Meteor / Cordova应用程序连接到10.0.2.2? (为什么应用程序会连接到那里?)

前端之家收集整理的这篇文章主要介绍了如何防止Meteor / Cordova应用程序连接到10.0.2.2? (为什么应用程序会连接到那里?)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Meteor应用程序,它在本地服务器上运行以进行开发( http://10.0.2.10:3000). ROOT_URL设置正确,因此__meteor_runtime_config __.ROOT_URL等于此URL.当然,该应用程序在10.0.2.0/24内的客户端计算机上的浏览器中运行良好.该应用程序也在我的Android手机上的移动chrome / firefox上工作正常,这也是10.0.2.0/24的一部分.然而,当我尝试在这个手机上运行它与meteor运行android-device –mobile-server http://10.0.2.10:3000/时会发生一些奇怪的事情:

当应用程序第一次启动时(或者在我清除所有应用程序数据后第一次启动)它会像应该的那样工作(来自数据库内容被加载)几秒钟.然后应用程序重新加载,并且不再加载来自数据库的任何远程内容.我添加了以下函数来查看Meteor尝试连接的位置:

Meteor.startup(function(){
    console.log(__meteor_runtime_config__.ROOT_URL);
})

第一次加载远程内容时,它会像我期望的那样返回http://10.0.2.10:3000/.第二次未加载远程内容时,它返回http://10.0.2.2:3000/.

现在的问题是,为什么Meteor / Cordova这样做,我该如何阻止这种行为呢?因为显然我无法以这种方式测试应用程序.当我有一个FQDN和HTTPS代理时,我还不确定它是否可以在生产中工作,但这已经超出了这一点.

我试图找到10.0.2.2,因为我的局域网中没有任何东西在那里运行,我没有在任何地方指定这个IP,并且在/cordova-build/www/application/index.html中找到它,它似乎是从boilerplate_web.cordova.html生成的(见链接https://searchcode.com/codesearch/view/91819963/).但是,Meteor提供了使用文件夹cordova-build-override覆盖这些生成文件的可能性,因此我删除了整个文件

if (/Android/i.test(navigator.userAgent)) {
    //[...]
}

阻止并添加一个简短的console.log(‘已删除’).这被调用所以我知道覆盖是成功的,当我grep通过整个构建的.apk文件10.0.2.2再也找不到 – 仍然行为是相同的.

有什么想法正在发生什么,怎么做?

解决方法

因此,即使正确设置ROOT_URL,仍然有一些特殊的变量,它们的移动版本没有设置,可能包含localhost.当一个Cordova客户端连接时,除了我上面提到的那个之外,在流星项目中似乎存在更多的代码片段替换localhost和10.0.2.2.所以这似乎导致我的应用程序重新连接到10.0.2.2.

我能找到的移动网址变量是
process.env.MOBILE_ROOT_URL和
process.env.MOBILE_DDP_URL.所以在Meteor.startup()函数中,我现在将它们设置为服务器端的真实ROOT_URL.我的Android(Cordova)应用程序现在仍然在第一次启动后重新连接几秒钟,但它重新连接到相同(和真实)的服务器URL(因此一切正常)!

我仍然不知道为什么它的重新连接和那些移动变量及其使用似乎没有很好地记录(或者我错过了一些东西),但我可以忍受现在的工作方式.

猜你在找的Cordova相关文章