javascript - 在 Ionic 应用程序上使用 $.getScript 加载 Google Map Api

标签 javascript angularjs cordova google-maps ionic-framework

我目前正在使用 apache cordova、ionic 和 google map 开发网络应用程序。 我在尝试正确加载 google map js api 时遇到问题。问题是该应用程序无法在我的设备上运行,但当我在 Ripple 上模拟它时却运行得很好。

所以我有一个 Ionic View 的 Controller ,当用户进入此 View 时,条件会检查 google map api 是否已加载,如果没有,我们加载它,然后开始使用 GM Api。我不知道哪里出了问题。

这是调用加载函数的条件...

$scope.$on('$ionicView.loaded', function () {
    var test = false;
    if (test) {
        alert("Google Map api fully loaded");
    }
    else {
        alert("Google map api not loaded"); //The alert is fired.
        $scope.loadApi();
    }

});

加载函数

$scope.loadApi = function () {
    if ($cordovaNetwork.isOnline()) //check if device is connected {

        alert('Loading api'); //The alert is fired
        $.getScript('https://maps.googleapis.com/maps/api/js?sensor=false&key=xxx',
        function () {

            alert("Api Loaded"); //Alert not fired on device
            $scope.startGeo(); // The function isn't called so no map

        });
    }
    else {
        alert('Check your connexion');
    }

};

这是 html 部分,以防我忘记了什么......

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <meta http-equiv="Content-Script-Type" content="text/javascript">

        <title></title>
        <link href="lib/ionic/css/ionic.css" rel="stylesheet">
        <link href="css/style.css" rel="stylesheet">
        <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
        <link href="css/ionic.app.css" rel="stylesheet">
        -->
        <!-- ionic/angularjs js -->
        <script src="lib/ionic/js/ionic.bundle.js"></script>

        <!--Google map for Angular-->

        <script src="lib/angular-google-maps/lodash.min.js"></script>
        <script src="lib/angular-google-maps/angular-simple-logger.min.js"></script>
        <script src="lib/angular-google-maps/angular-google-maps.min.js"></script>
        <script src="lib/localforage/localforage.min.js"></script>
        <script src="lib/localforage/angular-localForage.min.js"></script>
        <script src="lib/jquery.js"></script>

        <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
        <!-- cordova script (this will be a 404 during development) -->
        <script src="cordova.js"></script>
        <!-- your app's js -->
        <script src="js/app.js"></script>
        <!--<script src='https://maps.googleapis.com/maps/api/js?sensor=false&key=xxx'></script>-->
        <script src="js/controllers.js"></script>
    </head>

    <body ng-app="myapp">
        <ion-nav-view></ion-nav-view>
    </body>
</html>

我尝试了很多方法,例如使用 angular-load ,用 ajax 调用替换 getScript 函数(这基本上是同一件事),尝试了这个 answer看看是否有帮助..

感谢您的帮助。

最佳答案

第一个解决方案

通过替换 Google map 加载链接解决了我的问题。

index.html

安装白名单插件并添加到头部:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src  'self' 'unsafe-inline' *">

替换了谷歌地图加载链接:

<script src='//maps.googleapis.com/maps/api/js?sensor=false'></script>

删除了链接中的https:

controller.js

在 map 的 Controller 中:

加载函数,我把https协议(protocol)替换成了http协议(protocol)。

$scope.loadApi = function () {
    if ($cordovaNetwork.isOnline()) {
        console.log($scope.logs.apiLoading);
        $.getScript('http://maps.googleapis.com/maps/api/js?sensor=false', function () {
                $scope.startGeo();

        });
    }
    else if($cordovaNetwork.isOffline()) {
        alert($scope.logs.deviceOffline);
    }

};

第二种解决方案(使用 angular-google-maps)

只是提醒一下app.js中的 Angular 谷歌地图配置

对于那些使用 Angular 谷歌地图的人。该库会自动加载谷歌地图,您只需正确设置即可。还有一个事件来检查谷歌地图是否已加载。我当时没有意识到这一点,并将所有内容, Angular 谷歌地图加载过程与我的混合在一起。等等:)

angular.module('myapp').config(function (uiGmapGoogleMapApiProvider) {
    uiGmapGoogleMapApiProvider.configure({
        key: 'myKey',
        v: '3.20', //defaults to latest 3.X anyhow
        libraries: 'weather,geometry,visualization,places'
    });
})

关于javascript - 在 Ionic 应用程序上使用 $.getScript 加载 Google Map Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160545/

相关文章:

javascript - Vanilla JavaScript : How does <Dropdown Select> option. 删除(索引)工作吗?

javascript - Reactjs 最佳实践。何时使用渲染函数与何时使用新组件

javascript - AngularJS 递归模板默认关闭所有节点并使用 ng-click 展开它们

angularjs - 如何在没有 Gruntjs 的情况下运行 AngularJS 项目?

visual-studio - 无法在 vs 2017 中调试问题 Apache cordova 项目

html - 滚动时停止列表项 onclick 事件触发

Cordova:添加 android 平台时出错

javascript - jQuery 模糊事件未在隐藏元素上触发

javascript - Lodash uniqBy更新最新值

angularjs ui-date 只显示月份和年份