c# - 通过javascript设置iframe的用户代理

标签 c# javascript jquery asp.net-mvc iframe

试图满足的业务需求:在 iframe 中加载现有页面,模拟 iPhone 用户代理。这需要发生在客户端的原因是,有客户端脚本检测用户代理并将一些类附加到 html 元素上。基于此,网站的风格将彻底改变,因为 CSS 目标元素基于 html 类。

所以它会把它变成或在我试图在这里解决的情况下等等。

在 chrome 中使用 window.open 工作(如此代码所示)。该站点以适当的移动样式呈现。

使用 iframe 有效,但仅限于 FF。

理想情况下,我希望 iframe 版本在 Chrome 和 FF 中运行。

有什么想法吗?

<script type="text/javascript">


        navigator.__defineGetter__('userAgent', function () {
            return 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5';
        });

        var win = window.open('/home/get');
        win.navigator.__defineGetter__('userAgent', function () {
            return 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5';
        });
        win.location.href = '/home/get'; //required


        $(function () {
            var frame = $('<iframe width="320" height="480"></iframe>');
            frame.hide();
            $('#container').append(frame);


            (frame[0].contentWindow || frame[0].contentDocument).navigator.__defineGetter__('userAgent', function () {
                return 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5';
            });
            frame.attr('src', '/home/get');

            });


            frame.fadeIn();
        });
    </script>

最佳答案

搞清楚了,适用于 FF、Chrome 和 IE。我不确定 Safari,因为我没有安装它。它的概要是发出 ajax 请求,获取 html,然后打开 iframe 文档。 AFTER 打开它,覆盖它的 userAgent getter,然后写入从 ajax 调用收到的 html。

        $(function () {
        var frame = $('<iframe width="320" height="480"></iframe>');
        frame.hide();

        $('#container').append(frame);
        var contentWindow = frame[0].contentWindow || frame[0].contentDocument;

        var setUA = function() {
            if (Object.defineProperty) {
                Object.defineProperty(contentWindow.navigator, 'userAgent', {
                    configurable: true,
                    get: function () {
                        return 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5';
                    }
                });
            } else if (Object.prototype.__defineGetter__) {
                contentWindow.navigator.__defineGetter__('userAgent', function () {
                    return 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5';
                });
            } else {
                alert('browser not supported');
            }
        };

        $.ajax({
            cache: false,
            url: '/home/get',
            success: function (html) {
                contentWindow.document.open();
                setUA();
                contentWindow.document.write(html);
                contentWindow.document.close();
                frame.fadeIn();
            }
        });
    });

关于c# - 通过javascript设置iframe的用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248446/

相关文章:

javascript - 动态添加时,Bootstrap 切换显示效果不佳

javascript - 在表单的文本区域内选择时自动将单词转换为主题标签

javascript - jQuery .show 和 .hide 不起作用

c# - 如何获取写入文本框的最新字符?

c# - htmlAttributes MVC 5.1 编辑器

javascript - 在 C++ 的 JScript 中调用 instanceof 运算符 (IDispatch/IDispatchEx)

javascript - 如何为低版本android设备在javascript和html中实现onclick?

javascript - jQuery 3.0 removeAttr 与 prop

c# - 如何在物理引擎中有效地模拟静态矩形网格?

c# - 用于检测 C# 中新字段/属性添加的单元测试