やりたいこと
MonacaのVue.jsフレームワーク(Onsen UI不使用)で作成したアプリに、Adgenerationのバナー広告(JavaScript)を組み込みたいと思っています。
症状
マニュアル(Banner_Ad_Monaca)通りにJavaScriptを記載し、フッターにバナー広告を表示することはできたのですが、しばらく表示した後にクリックすると、cordoveプラグイン「InAppBrowser」が起動しなくなってしまいます。
具体的には、アプリ起動時にバナー広告をタッチすると、「InAppBrowser」が起動し、App.storeなどが表示されます。しばらくアプリを動かした(2, 3分)後、再びバナー広告をタッチすると、何も表示されなくなってしまいます。おそらく、「InAppBrowser」が起動していません。
コード
フッターのメソッドは、以下のURLの記載をほぼコピーしています。
Banner_Ad_Monaca
vue
1<!--App.vue--> 2<template> 3 <div class="container"> 4 <transition name="route"> 5 <router-view /> 6 </transition> 7 <ad-footer /> <!--広告を表示せるフッターコンポーネント--> 8 </div> 9</template> 10 11<script> 12 import AdFooter from '@/components/Footer' 13 export default { 14 components: { 15 AdFooter 16 }, 17 // 以降省略 18 } 19</script>
vue
1<!--Footer.vue--> 2<!--フッターのコンポーネント --> 3<template> 4 <div class="footer" ref="adg" :id="divid"> 5 </div> 6</template> 7 8<script> 9 export default { 10 data: function() { 11 return { 12 divid: 'banner', 13 } 14 }, 15 computed: { 16 adid: function() { 17 return '00000' // 仮の数値です。 18 } 19 }, 20 mounted: function() { 21 this.makeADGTag(this.adid, this.id, '320', '50') 22 }, 23 methods: { 24 makeADGTag: function(adid, divid, width, height) { 25 // マニュアルでは、「getElementById」で要素を取得しているが、 26 // $refsでdivを参照するように変更 27 let adg = this.$refs.adg 28 let script = document.createElement('script') 29 script.type = 'text/javascript' 30 // async=trueにすることによって非同期に対応されます 31 script.src = 'https://i.socdm.com/sdk/js/adg-script-loader.js?id=' + adid + '&adType=FREE&width=' + width + '&height=' + height + '&displayid=0&targetID=adgAd_' + divid + '&async=true' 32 if (adg != null) { 33 adg.appendChild(script) 34 } 35 let self = this 36 adg.style.display = 'none' 37 let count = 0 38 let timer = setInterval(function checkAd() { 39 count++ 40 if (count > 100) { 41 clearInterval(timer) 42 return; 43 } 44 if (self.checkADGTag(adg) === true) { 45 clearInterval(timer) 46 adg.style.display = 'inline' 47 } 48 }, 100); 49 }, 50 checkADGTag: function(obj) { 51 let links = obj.getElementsByTagName('a') 52 let frms = obj.getElementsByTagName('iframe') 53 if (links.length > 0) { 54 this.makeADGLink(links) 55 return true; 56 } 57 let res = false 58 for (let i = 0; i < frms.length; i++) { 59 if (this.checkADGTag(frms[i].contentWindow.document) === true) { 60 res = true 61 } 62 } 63 return res 64 }, 65 makeADGLink: function(arr) { 66 for (let i = 0; i < arr.length; i++) { 67 (function(a) { 68 let href = a.href 69 a.href = '#' 70 a.onclick = function() { 71 // マニュアルでは、「window.open」で記載されているが、 72 // cordovaの「InAppBrowser」に変更 73 let ref = cordova.InAppBrowser.open(href, '_blank') 74 return false 75 }; 76 })(arr[i]) 77 } 78 } 79 } 80 } 81</script>
補足
cordoveプラグイン「InAppBrowser」を導入済みです。
上記の一つ目のコード(App.vue)のとおり、アプリの起動中、画面を移動(vue router使用)しても、フッターは固定されたままにしています。
Vue.jsで作成したアプリに広告を組み込むのは初めてで、このような症状を改善したいと思っていますが、どのようにしたら良いのか、良い案が浮かびません。どなたかにご教示していただけたらと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。