haruxiang
@haruxiang

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

AndroidでYahoo!ブラウザーだとuserAgentが取得できない?

解決したいこと

Android×Yahooアプリの場合のみエラー文を出す。

例)
フロントでvue.jsを主につかっています。
基本的に使っているブラウザをプログラミングで取得したい場合useragentを使っているかと思います。(useragentが廃止されているとかの話が出てますがここではしません。)
以下のようにuseragentを取得してブラウザの条件によってエラーを出したりするかと思います。

useAgentによる条件

  const useragent = window.navigator.userAgent.toLowerCase();
  if (useragent.indexOf("yahoo") != -1 && useragent.indexOf("Android") != -1 )
    {
     $("#disp").html('<p class="red_wak">※YahooブラウザではPDFファイルは開けません。Chrome等のブラウザをお使いください。</p>');
    }

大体こんな感じにコードを組み実際本番で見たのですが、問題が起きました。自分のサイトをAサイトとします。
・AndroidでYahooアプリを起動→URL直打ちしてAサイトにアクセス→エラーがでる
・AndroidでYahooアプリを起動→他のサイトを経由してAサイトにアクセス→エラーが出てこない

以上の2つの事象が起きて強いました。

なぜできないのか調査した結果
yahooのuseragentの末尾に以下のコードが出てきます

YJApp-ANDROID
jp.cp.yahoo.android.yjtop/3.000.0

これが別タブで開くと消えてしまいます。
例えば
BサイトをみていてそこからAサイトの遷移ボタンを発見しそこからAサイトを別タブで表示し開くと末尾のコードが消えてしまうのです。

こうなるともうどうしようもなく、他の手段が見つからなくて困っております。なにかyahooでのアクセスを制限させる方法があるか分かる人がいたら教えてほしいです。
よろしくお願いします。

0

1Answer

BサイトをみていてそこからAサイトの遷移ボタンを発見しそこからAサイトを別タブで表示し開くと末尾のコードが消えてしまうのです。

「新しいタブを開いた」時点で使用しているアプリがChrome等のブラウザに切り替わっているのであればUAを見る行為は無駄だと思います.なぜYahooを起点とするアクセスを防ぎたいのかイマイチよく分からないのですが,直リンを防ぎたいとかの目的ならサーバーサイドでも対策をしてやらないといけないのではないでしょうか.

そもそも特定ブラウザからのアクセス制御は通常避けるべき行為とされています.以下のドキュメントもお読みください.

https://developer.mozilla.org/ja/docs/Web/HTTP/Browser_detection_using_the_user_agent

アクセス制御はユーザーへの影響が一番大きい対応ですので,回避すべき技術的問題をもっと慎重に検討すべきです.

0Like

Comments

  1. 何も情報がないのでエスパーですが,Yahooアプリに限らず組み込みWebView系がほぼ障害を受けるような問題であると察します.これらをUA文字列で漏れなく把握するのは不可能です.target="_blank"とかで強制的にタブ(アプリ)を切り替えさせるとかの方がまだ確実に対処できるかもしれません.

Your answer might help someone💌