回答編集履歴

1 URLがローカルのものになっていたため、一般的なURLにした

KNaito

KNaito score 348

2018/10/09 18:32  投稿

基本的に、Monaca/Cordovaではiframeを使ったアプリケーションはあまりおすすめ出来ないと思います。(特に、ブラウザの進む・戻るの処理に問題があると思います)
ですが、この質問については、自分の環境で次のコードで試したところ、特に問題なく動作しているようでした。
```html
   <script>
     document.addEventListener('deviceready', onDeviceReady, false);
     function onDeviceReady() {
       var iframe = document.createElement("iframe");
       iframe.setAttribute("src", "http://10.0.180.10/teratail/");
       iframe.setAttribute("src", "http://path/to/my/website");
       document.body.appendChild(iframe);
       function inAppOpen(url){
         window.open = cordova.InAppBrowser.open;
         window.open(url,'_system','location=yes');
       }
       iframe.onload = function() {
         var innerWindow = iframe.contentWindow;
         innerWindow.inAppOpen= inAppOpen;
       };
     }
   </script>
```
iOSとAndroidのMonacaデバッガーでそれぞれ動作確認しました。
注意点としては
1. iframeタグをbodyタグの中に記述してしまうと、iosで問題が発生するため、devicereadyイベント後にjavascriptでiframeタグを動的に挿入している
2. iframeのcontentWindowにinAppOpenオブジェクトを組み込むのは、iframeを読み終わってから行う。
です。2.が本当に必要かどうかはちょっとよく分からないのですが、Webページの読み込みに時間がかかるとinAppOpenオブジェクトの組み込みが早すぎてしまうのではないかと思い、このようにしてみました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る