重定向到Phonegap

时间:2016-05-16 03:49:09

标签: javascript cordova admob phonegap-plugins cordova-admob

我已将AdMob Plugin Pro添加到我的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时会出现问题。我尝试了几种方法,但没有一种方法有效。

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

  1. 当用户点击链接时,我的应用程序将重新加载页面。例如,如果用户在主页并单击“设置”按钮,则整个页面将重新加载到“setting.html”
  2. 操纵DOM和内容的脚本始终放在<body>
  3. 的最后一行

    以下是我的尝试:

    1. 复制上面的onDeviceReady()addEventListner(),并放入另一页。

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

      • 我发现AdMob变为undefined
    3. 所以我想知道我错过了什么或者我做错了什么?

      谢谢!

2 个答案:

答案 0 :(得分:2)

我是this cordova-admob plugin的作者。

作为@Simon stated before,您最好的机会是迁移到SPA。也就是说,如果这是不可能的,也许你可以尝试一个丑陋的解决方法,但这在很大程度上取决于你如何实现应用程序:

尝试拦截index.html中的每个链接,并尝试通过ajax加载它。通过ajax加载后,您可以在index.html正文中加载内容。确保评估新内容中的每个脚本。在这里,您可以找到我将如何实施的示例:http://plnkr.co/edit/ew21klKYRcfvjX8wrAY1

它是在纯javascript中实现的,但是如果你在jQuery下,那么它可以让你的生活更轻松$(document.body).load(...)

答案 1 :(得分:1)

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

如果你可以重构SPA,你的生活将在很多方面变得更容易。

引用Cordova docs

  

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

     

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

     

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