別のユーザーエージェントでiframeをロードすることは可能ですか?iframeにモバイルユーザーエージェントを使用すると、アプリでモバイルサイトをホバーポップアップとして表示できます。
たとえば、Googleは、ユーザーエージェントがモバイルエージェントの場合にのみモバイル検索結果ページを表示します。
代替ソリューションはありますか、またはこのアイデアに関連するセキュリティリスクはありますか?
まず、ユーザー エージェント文字列を変更する関数を作成する必要があります。
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 をターゲットにすることもできます。
JavaScriptでそれを行うことができます:
navigator.__defineGetter__('userAgent', function(){
return 'foo' // customized user agent
});
navigator.userAgent; // 'foo'
ただし、これは一部のブラウザーでのみ機能します。
この質問を参照してください: javascript でユーザーエージェントをモックしますか?
別のユーザー エージェントでリクエストを行うプロキシを作成し、プロキシを介して iframe コンテンツを読み込むことができます。
私が見たところ、2 つの解決策があります。
ほとんどの Web サイトはユーザー エージェントごとにレンダリングしません。ユーザー エージェントを認識して、別のドメイン (http://m.youtube.com/ など) またはその他のドメインで到達可能なモバイル ビューにユーザーをリダイレクトするだけです。 URL セグメント。ドキュメントを確認し、モバイル URL を取得して iframe にロードするだけです。
もう 1 つの解決策は、Iframe をアプリケーションに向けて、バックエンドからドキュメントを取得することです。その後、リクエストのユーザー エージェントを変更できます。
HTML からリクエスト ヘッダーに影響を与えることは不可能です。しかし、JavaScriptでそれを行うことができます。