Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重定向到Phonegap中的新页面后,AdMob未定义_Javascript_Cordova_Admob_Phonegap Plugins_Cordova Admob - Fatal编程技术网

Javascript 重定向到Phonegap中的新页面后,AdMob未定义

Javascript 重定向到Phonegap中的新页面后,AdMob未定义,javascript,cordova,admob,phonegap-plugins,cordova-admob,Javascript,Cordova,Admob,Phonegap Plugins,Cordova Admob,我已将添加到我的Phonegap应用程序中。我遵循示例代码并在我的应用程序主页中输入以下代码: function onDeviceReady() { var admobid = {}; if( /(android)/i.test(navigator.userAgent) ) { admobid = { // for Android banner: 'ca-pub-{key hidden}' interstitial:

我已将添加到我的Phonegap应用程序中。我遵循示例代码并在我的应用程序主页中输入以下代码:

function onDeviceReady() {
    var admobid = {};
    if( /(android)/i.test(navigator.userAgent) ) {
        admobid = { // for Android
            banner: 'ca-pub-{key hidden}'
            interstitial: 'ca-pub-{key hidden}'
        };
    } else if(/(ipod|iphone|ipad)/i.test(navigator.userAgent)) {
        admobid = { // for iOS
            banner: 'ca-pub-{key hidden}'
            interstitial: 'ca-pub-{key hidden}'
        };
    }
    if(window.AdMob) AdMob.prepareInterstitial( {adId:admobid.interstitial, autoShow:true} );
}
document.addEventListener('deviceready', onDeviceReady, false);
上面的代码工作正常,并显示了一个间隙广告,但当我尝试在另一个页面中再次调用AdMob时,问题就出现了。我尝试了几种方法,但都不管用

以下是我的应用程序的一些背景信息:

  • 当用户单击链接时,我的应用程序将重新加载页面。例如,如果用户在主页中并单击“设置”按钮,则整个页面将重新加载到“setting.html”
  • 操作DOM和内容的脚本总是放在
    的最后一行
  • 以下是我尝试过的:

  • 复制上面相同的
    ondevicerady()
    addEventListner()
    并放入另一页

    • 我发现在第二页中没有再次触发DeviceRady事件,因此当然不会再次显示中间广告
  • 只需将
    AdMob.prepareInterstitial({adId:admobid.interstitial,autoShow:true}
    复制到新页面,并在加载页面后执行

    • 我发现AdMob变得
      未定义
  • 所以我想知道我是错过了什么还是做错了什么


    谢谢!

    不要使用多页,正如Cordova文档所述,单页应用程序是您的朋友。当您加载新页面时,您将丢失所有插件和其他Cordova功能,除非您在所有页面中都包含Cordova.js

    如果你能重构成一个水疗中心,你的生活在很多方面都会变得更容易

    引述:

    首先,您的Cordova应用程序应采用SPA(单页应用程序)设计。SPA是一种松散定义的客户端应用程序,通过网页的一个请求运行。用户加载初始资源集(HTML、CSS和JavaScript)和进一步更新(显示新视图、加载数据)通过AJAX完成。SPA通常用于更复杂的客户端应用程序。GMail就是一个很好的例子。加载GMail后,邮件视图、编辑和组织都是通过更新DOM来完成的,而不是离开当前页面来加载一个全新的页面

    使用SPA可以帮助您以更高效的方式组织应用程序,但它对Cordova应用程序也有特定的好处。Cordova应用程序必须等待deviceready事件触发后才能使用任何插件。如果您不使用SPA,并且您的用户点击从一个页面转到另一个页面,则您必须等待deviceready事件在使用插件之前,您可以再次启动。随着应用程序变得越来越大,这很容易被忘记

    即使您选择不使用Cordova,在不使用单页体系结构的情况下创建移动应用程序也会对性能产生严重影响。这是因为在页面之间导航需要重新加载脚本、资产等。即使缓存这些资产,也会出现性能问题


    不要使用多个页面,正如Cordova文档所述,单页面应用程序是您的朋友。当您加载新页面时,您将丢失所有插件和其他Cordova功能,除非您在所有页面中包含Cordova.js

    如果你能重构成一个水疗中心,你的生活在很多方面都会变得更容易

    引述:

    首先,您的Cordova应用程序应采用SPA(单页应用程序)设计。SPA是一种松散定义的客户端应用程序,通过网页的一个请求运行。用户加载初始资源集(HTML、CSS和JavaScript)和进一步更新(显示新视图、加载数据)通过AJAX完成。SPA通常用于更复杂的客户端应用程序。GMail就是一个很好的例子。加载GMail后,邮件视图、编辑和组织都是通过更新DOM来完成的,而不是离开当前页面来加载一个全新的页面

    使用SPA可以帮助您以更高效的方式组织应用程序,但它对Cordova应用程序也有特定的好处。Cordova应用程序必须等待deviceready事件触发后才能使用任何插件。如果您不使用SPA,并且您的用户点击从一个页面转到另一个页面,则您必须等待deviceready事件在使用插件之前,您可以再次启动。随着应用程序变得越来越大,这很容易被忘记

    即使您选择不使用Cordova,在不使用单页体系结构的情况下创建移动应用程序也会对性能产生严重影响。这是因为在页面之间导航需要重新加载脚本、资产等。即使缓存这些资产,也会出现性能问题

    我是这本书的作者

    因此,您最好的机会是迁移到SPA。也就是说,如果这不可能,您可以尝试一种难看的解决方法,但这在很大程度上取决于您如何实现应用程序:

    尝试截取
    index.html
    中的每个链接,并尝试通过ajax加载。一旦通过ajax加载,您可以加载
    index.html
    正文中的内容。确保评估新内容中的每个脚本。在这里,您可以找到我将如何实现的示例:

    它是用纯javascript实现的,但是如果您使用jQuery,那么它可以通过
    $(document.body).load(…)

    使您的生活更轻松

    因此,您最好的机会是迁移到SPA。也就是说,如果这不可能,您可以尝试一种难看的解决方法,但这在很大程度上取决于您如何实现应用程序:

    尝试截取
    index.html
    中的每个链接,并尝试通过ajax加载。通过ajax加载后,您可以加载
    index.html
    正文中的内容。请确保评估