質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Monaca

    1011questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • AngularJS

    578questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

  • Onsen UI

    333questions

    HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

window.openの_systemで「既にログインされています。・・・」アラートが表示されます。

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,067

kuroneko334

score 2

前提・実現したいこと

MonacaでOnsenUIを使ってアプリを開発しています。

発生している問題・エラーメッセージ

iphoneのMonacaデバッガーをインストールし、その中で、
外部ブラウザで開きたいもの(GoogleMAPや外部のサイト)があります。
onclickの中に外部リンクを開くようのコードを書いて、実行すると

既にログインされています。ログアウトして再度QRコードを読み取ってください。


というアラートが表示されてしまいます。
外部アプリが立ち上がり正常に表示されるのですが、monacaデバッガーアプリに戻るとアラートが表示されてしまいます。
(開くときにもチラッと見えることもあります。)

該当のソースコード

var url = "http://yahoo.com";
window.open(url, '_system');

試したこと

端末の別のアプリの影響なのかと思い、別の端末でも試しましたが同じアラートが表示されます。

また、cordova.InAppBrowserを利用して試しても同じでした。

var gps_lat = '35';
var gps_lng = '139';
var name = '東京タワー';
cordova.InAppBrowser.open('https://maps.google.com/maps?ie=UTF8&f=d&dirflg=w&saddr=' + gps_lat + ',' + gps_lng + '&daddr=' + name + '&type=dep', '_system')


上記コードはGoogleMAPでのナビ検索を外部アプリで開くようにしたものです。

補足情報(言語/FW/ツール等のバージョンなど)

iphone5s、iphone6で発現しました。
Android端末ではアラートは出ませんでした。

この現象はmonacaデバッガー固有の現象(リリースの際に無視出来るもの)なのか、何か対策が出来るものなのかわからない状態です。
解決方法をお教えいただければと思います。

よろしくお願い致します。

ご質問を受けての補足です

>アラートが出ているタイミングと、具体的な「外部ブラウザで開きたいもの」が何なのかもう少し詳しく知りたいですね。
>monacaから開くときにたとえば自動的にログインするようになっていたとして、既にGoogleChromeが立ち上がっていたら「既にログインされている」という状態になるのかもしれません。
こちらを受けまして、新規プロジェクトで具体的な発現方法を再現してみました。

MonacaクラウドIDE上から新規プロジェクト
「OnsenUI AngularJS1」でのSplitterMenuをテンプレートで作成し、
メニューを1項目をonclick設定して外部リンクを開くようにしてみました。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
  <script src="components/loader.js"></script>
  <script src="lib/angular/angular.min.js"></script>
  <script src="lib/onsenui/js/onsenui.min.js"></script>
  <script src="lib/onsenui/js/angular-onsenui.min.js"></script>

  <link rel="stylesheet" href="components/loader.css">
  <link rel="stylesheet" href="lib/onsenui/css/onsenui.css">
  <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css">
  <link rel="stylesheet" href="css/style.css">

  <script>
    ons.bootstrap()
      .controller('AppController', function($scope) {
        this.load = function(page) {
          $scope.splitter.content.load(page);
          $scope.splitter.left.close();
        };

        this.toggle = function() {
          $scope.splitter.left.toggle();
        };


      });

    ons.ready(function() {
        console.log("Onsen UI is ready!");

    });
  </script>
</head>
<body>

  <ons-splitter ng-controller="AppController as app" var="splitter">
    <ons-splitter-side side="left" width="220px" collapse swipeable>
      <ons-page>
        <ons-list>
          <ons-list-item ng-click="app.load('home.html')" tappable>
            Home
          </ons-list-item>
          <ons-list-item ng-click="app.load('settings.html')" tappable>
            Settings
          </ons-list-item>
          <ons-list-item onclick="window.open('http://yahoo.co.jp/','_system')" tappable>
            About
          </ons-list-item>
        </ons-list>
      </ons-page>
    </ons-splitter-side>
    <ons-splitter-content page="home.html"></ons-splitter-content>
  </ons-splitter>

  <ons-template id="home.html">
    <ons-page>
      <ons-toolbar>
        <div class="left">
          <ons-toolbar-button ng-click="app.toggle()">
            <ons-icon icon="md-menu"></ons-icon>
          </ons-toolbar-button>
        </div>
        <div class="center">
          Main
        </div>
      </ons-toolbar>
      <p style="text-align: center; opacity: 0.6; padding-top: 20px;">
        Swipe right to open the menu!
      </p>
    </ons-page>
  </ons-template>

  <ons-template id="settings.html">
    <ons-page>
      <ons-toolbar>
        <div class="left">
          <ons-toolbar-button ng-click="app.toggle()">
            <ons-icon icon="md-menu"></ons-icon>
          </ons-toolbar-button>
        </div>
        <div class="center">
          Settings
        </div>
      </ons-toolbar>
    </ons-page>
  </ons-template>

  <ons-template id="about.html">
    <ons-page>
      <ons-toolbar>
        <div class="left">
          <ons-toolbar-button ng-click="app.toggle()">
            <ons-icon icon="md-menu"></ons-icon>
          </ons-toolbar-button>
        </div>
        <div class="center">
          About
        </div>
      </ons-toolbar>
    </ons-page>
  </ons-template>
</body>
</html>
 <ons-list-item onclick="window.open('http://yahoo.co.jp/','_system')" tappable>
            About
 </ons-list-item>


こちらをタップすると、そのタイミングで「既にログインされています。ログアウトして再度QRコードを読み取ってください。」と表示されます。
(タイミングによっては外部リンクを開いた後monacaに戻ってくると表示されることもあります。)
外部アプリとしては「Safari」が立ち上がりました。
この状態でも上記アラートが立ち上がってしまうので困っています。。
どうにかアラートが表示されないようにすることは出来ないものでしょうか?
アラートが表示されなければ正常動作で問題ないのですが・・・

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • akabee

    2017/04/15 23:15

    アラートが出ているタイミングと、具体的な「外部ブラウザで開きたいもの」が何なのかもう少し詳しく知りたいですね。Monacaの問題というよりは「外部ブラウザで開きたいもの」が出している関連のアラートと予想します。たとえばGoogleChromeにはログインという概念が存在します。詳しい仕様は知らないのですが、monacaから開くときにたとえば自動的にログインするようになっていたとして、既にGoogleChromeが立ち上がっていたら「既にログインされている」という状態になるのかもしれません。

    キャンセル

  • kuroneko334

    2017/04/16 08:58

    コメントありがとうございます!質問へ追記致しました。確かに自分も「外部ブラウザで開きたいもの」が関連しているかと思い、yahooホームなど別のURLを開いても同じ状況でした。。質問に補足を追加いたしましたので恐れ入りますがご確認をいただけますと幸いです。よろしくお願いいたします。

    キャンセル

回答 1

+1

QRコード等と表示されているため、「外部ブラウザで開きたいもの」がよほど特殊なのかと予想したのですがそういうわけではないのですね。私自身はAndroidの検証環境しか持ち合わせていないため現象の再現ができないのですが、monacaでの開発事例で同様の問題に直面したという情報はちらほら見かけます。
参考1
参考2

参考1のリンクではカスタムデバッガーでのみ発生するということで解決していますが、どちらにしても
何かのバグに近い事象のように思われます。monacaなのかcordovaなのか分かりませんが、根は深いと思われます。
クリティカルな解決策が提示できるわけではないのですが、私であれば以下のように対応します。

1.リリースビルドしてみて問題が発生しなければひとまずデバッグ時にその事象が出ることは許容する
2.リリースビルド時にも問題が発生したら、
2-1.WebIntentで問題が解消しないかどうか確認する
2-2.Webページへのリンクをすることを諦めて代替案を検討する
2-3.iOSではそのメッセージが出てしまうことをユーザーに開示したうえで配布する
2-4.iOSでの配布を諦める

もう少し、2-1.のような試行案が示せればよいのですが、私自身そこまでWEBページリンクのネタがありません。。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/17 14:25

    ご回答ありがとうございます。
    確かに、カスタムデバッガーのみで発生する様な気がします。
    (それならそれで取り敢えずどこに問題があるのかわかるので、全然良いのですが、、)

    まずはリリースビルドにて確認をしてみます!
    確認後こちらの質問にて結果を報告させていただきます!
    よろしくお願い致します。

    キャンセル

同じタグがついた質問を見る

  • Monaca

    1011questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • AngularJS

    578questions

    AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

  • Onsen UI

    333questions

    HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。