前提・実現したいこと
Monacaを利用して、Onsenui+javascriptにてアプリを制作しています。
サイドバーを<ons-splitter>で作成して、その中のアイテムを選択すると、googlemapをiframeで表示したいと考えいております。
発生している問題・エラーメッセージ
サイドバー単体では動作は問題ないのですが、iframeを使用するとmap表示がされなくなります。
iframeを優先させるとサイドバーが閉じなくなります。
該当のソースコード
html
1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"> 6 <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 7 <script src="components/loader.js"></script> 8 <script src="lib/onsenui/js/onsenui.min.js"></script> 9 10 <link rel="stylesheet" href="components/loader.css"> 11 <link rel="stylesheet" href="lib/onsenui/css/onsenui.css"> 12 <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css"> 13 <link rel="stylesheet" href="css/style.css"> 14 15<script> 16 window.fn = {}; 17 18 //初期読み込み時のマップ表示 19 window.onload = function() { 20 "use strict"; 21 var url = "https://maps.google.co.jp/maps"; 22 var param = { 23 tokyo: { 24 center: { lat: 35.681661, lng: 139.767185 } 25 }, 26 zoom: 18, 27 lang: "ja" 28 }; 29 var name = "tokyo" 30 var iframe = document.getElementById("ifr"); 31 // パラメータ指定 32 var p = "?output=embed" 33 + "&ll=" + param[name].center.lat.toString() + "," + param[name].center.lng.toString() 34 + "&z=" + param.zoom.toString() 35 + "&hl=" + param.lang; 36 iframe.setAttribute("src", url + p); 37 } 38 39 window.fn.open = function() { 40 var menu = document.getElementById('menu'); 41 menu.open(); 42 }; 43 44 window.fn.load = function(page,name) { 45 "use strict"; 46 var url = "https://maps.google.co.jp/maps"; 47 var param = { 48 tokyo: { 49 center: { lat: 35.681661, lng: 139.767185 } 50 }, 51 oosaka: { 52 center: { lat: 34.702803, lng: 135.495908 } 53 }, 54 zoom: 18, 55 lang: "ja" 56 }; 57 58 var content = document.getElementById('content'); 59 var menu = document.getElementById('menu'); 60 var iframe = document.getElementById("ifr"); 61 // パラメータ指定 62 var p = "?output=embed" 63 + "&ll=" + param[name].center.lat.toString() + "," + param[name].center.lng.toString() 64 + "&z=" + param.zoom.toString() 65 + "&hl=" + param.lang; 66 iframe.setAttribute("src", url + p); 67 //alert(url + p); 68 69 content.load(page) 70 .then(menu.close.bind(menu)); 71 }; 72</script> 73</head> 74<body> 75 <ons-page> 76 <ons-toolbar> 77 <div class="center">Map</div> 78 </ons-toolbar> 79<ons-splitter> 80 <ons-splitter-side id="menu" side="left" width="220px" collapse swipeable> 81 <ons-page> 82 <ons-list> 83 <ons-list-item onclick="fn.load('map1.html','tokyo')" tappable> 84 東京駅 85 </ons-list-item> 86 <ons-list-item onclick="fn.load('map2.html','oosaka')" tappable> 87 大阪駅 88 </ons-list-item> 89 </ons-list> 90 </ons-page> 91 </ons-splitter-side> 92 <ons-splitter-content id="content" page="map1.html"></ons-splitter-content> 93</ons-splitter> 94 95<template id="map1.html"> 96 <ons-page> 97 <ons-toolbar> 98 <div class="left"> 99 <ons-toolbar-button onclick="fn.open()"> 100 <ons-icon icon="md-menu"></ons-icon> 101 </ons-toolbar-button> 102 </div> 103 <div class="center"> 104 東京駅 105 </div> 106 </ons-toolbar> 107 <iframe id="ifr" width="100%" height="100%"></iframe> 108 </ons-page> 109</template> 110 111<template id="map2.html"> 112 <ons-page> 113 <ons-toolbar> 114 <div class="left"> 115 <ons-toolbar-button onclick="fn.open()"> 116 <ons-icon icon="md-menu"></ons-icon> 117 </ons-toolbar-button> 118 </div> 119 <div class="center"> 120 大阪駅 121 </div> 122 </ons-toolbar> 123 <iframe id="ifr" width="100%" height="100%"></iframe> 124 </ons-page> 125</template> 126 </ons-page> 127</body> 128</html>
試したこと
iframeのsrcに入れるデータをalertで表示させてみましたが、ちゃんと関数内で受け取れていました。
jsavascript
1 content.load(page) 2 .then(menu.close.bind(menu));
javascript内のcontent.loadのタイミングが一番悪さをしていそうですが、どう修正していいかわかりません。
よい方法を教えていただけますでしょうか?
お願い致します。
使用
フレームワーク:onsenui
言語:HTML+CSS+javascript
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。