20

別のユーザーエージェントでiframeをロードすることは可能ですか?iframeにモバイルユーザーエージェントを使用すると、アプリでモバイルサイトをホバーポップアップとして表示できます。

たとえば、Googleは、ユーザーエージェントがモバイルエージェントの場合にのみモバイル検索結果ページを表示します。

代替ソリューションはありますか、またはこのアイデアに関連するセキュリティリスクはありますか?

4

5 に答える 5

10

まず、ユーザー エージェント文字列を変更する関数を作成する必要があります。

function setUserAgent(window, userAgent) {
  if (window.navigator.userAgent != userAgent) {
    var userAgentProp = {
      get: function() {
        return userAgent;
      }
    };
    try {
      Object.defineProperty(window.navigator, 'userAgent', userAgentProp);
    } catch (e) {
      window.navigator = Object.create(navigator, {
        userAgent: userAgentProp
      });
    }
  }
}

次に、iframe 要素をターゲットにする必要があります。

setUserAgent(
    document.querySelector('iframe').contentWindow, 
    'Aakash Chakravarthy Mobile Agent'
);

ID を iframe に設定し、ページ上のすべての iframe 要素ではなく ID をターゲットにすることもできます。

于 2015-02-27T13:26:42.190 に答える
7

JavaScriptでそれを行うことができます:

navigator.__defineGetter__('userAgent', function(){
    return 'foo' // customized user agent
});

navigator.userAgent; // 'foo'

ただし、これは一部のブラウザーでのみ機能します。

この質問を参照してください: javascript でユーザーエージェントをモックしますか?

于 2012-10-11T17:46:35.513 に答える
6

別のユーザー エージェントでリクエストを行うプロキシを作成し、プロキシを介して iframe コンテンツを読み込むことができます。

于 2012-10-11T17:45:29.023 に答える
1

私が見たところ、2 つの解決策があります。

  • ほとんどの Web サイトはユーザー エージェントごとにレンダリングしません。ユーザー エージェントを認識して、別のドメイン (http://m.youtube.com/ など) またはその他のドメインで到達可能なモバイル ビューにユーザーをリダイレクトするだけです。 URL セグメント。ドキュメントを確認し、モバイル URL を取得して iframe にロードするだけです。

  • もう 1 つの解決策は、Iframe をアプリケーションに向けて、バックエンドからドキュメントを取得することです。その後、リクエストのユーザー エージェントを変更できます。

HTML からリクエスト ヘッダーに影響を与えることは不可能です。しかし、JavaScriptでそれを行うことができます。

于 2012-10-11T17:49:03.660 に答える