使用 Iframe 的自定义用户代理

2024-04-08

是的,我已经读过使用不同的用户代理加载 iframe 内容 https://stackoverflow.com/questions/12845445/load-iframe-content-with-different-user-agent但我不明白如何正确实现它/它不起作用

我正在尝试在 chrome 扩展中创建一个带有自定义用户代理的 Iframe,这是我当前的代码(来自其他教程/答案)

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
            });
        }
    }
}
window.addEventListener("load", function() {
document.querySelector('iframe').contentWindow, 'Test User Agent';
});
<title>Title</title>
<link rel="icon" href="favicon.ico" type="image/ico" sizes="16x16">
<iframe src="https://www.whatsmyua.info/" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
<script src='index.js'>
</script>

由于某种原因,用户代理无法工作,如加载的页面所示。


你需要使用内容脚本将该代码插入到页面上下文中 https://stackoverflow.com/a/9517879.

1a.注入内容脚本

它可以通过编程方式从您的扩展页面注入到 iframe 中。

清单.json

"permissions": ["webNavigation"]

索引.js:

chrome.tabs.getCurrent(tab => {
  chrome.webNavigation.onCommitted.addListener(function onCommitted(info) {
    if (info.tabId === tab.id) {
      chrome.webNavigation.onCommitted.removeListener(onCommitted);
      chrome.tabs.executeScript({
        frameId: info.frameId,
        file: 'content.js',
        runAt: 'document_start',
      });
    }
  }, {
    url: [{urlEquals: document.querySelector('iframe').src}],
  });
});

1b.声明内容脚本

请注意,以前的方法理论上可能允许某些 iframe 的内联脚本在其<head>先跑。在这种情况下,您必须向 iframe 添加一个虚拟 URL 参数src(例如https://example.org/page/page?foobar)并使用声明性匹配 https://developer.chrome.com/extensions/content_scripts#declaratively在manifest.json中:

"content_scripts": [{
  "matches": ["*://example.org/*?foobar*"],
  "all_frames": true,
  "run_at": "document_start",
  "js": ["content.js"]
}],

2.添加页面脚本

要立即运行我们的代码,让我们通过 textContent 运行它。我们没有为页面代码使用单独的文件,因为这会将其放入队列中,可以在当前挂起的页面脚本之后运行。

内容.js:

var script = document.createElement('script');
script.textContent = '(' + function() {
  Object.defineProperty(navigator, 'userAgent', {
    get() {
      return 'Test User Agent';
    },
  });
} + ')();';
(document.head||document.documentElement).appendChild(script);
script.remove();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Iframe 的自定义用户代理 的相关文章

随机推荐

  • 在 Spring 3.2 和 Thymeleaf 2.1.3 中使用多个模板解析器来处理电子邮件

    我在定义 a 时遇到问题ClassLoaderTemplateResolver用于电子邮件和一个ServletContextTemplateResolver用于网络浏览量 我在尝试发送电子邮件时收到以下错误 HTTP Status 500
  • 关闭连接是最终确定最佳实践吗? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么要实现finalize https stackoverflow com questions 158174 why would you ever implement finalize 我看到一些j
  • 将字符串转换为内存流 - 内存流不可扩展?

    我试图将一个字符串写入内存流 但失败并出现错误消息 Memory stream is not expandable 产生此问题的代码行 context Response Filter new System IO MemoryStream S
  • ViewPager onPageSelected 为第一页

    因此 当使用 ViewPager 时 不会为第一页调用 onPageSelected 侦听器 问题与this http code google com p android issues detail id 27526 我有一些逻辑为当前选定
  • Vim:突出显示每种文件类型的 TODO 一词

    我想在 vim 中突出显示 TODO 这个词 无论编辑什么文件 代码或普通文本 它目前适用于许多不同的语言 例如 默认情况下 TODO 在 C Java 注释中突出显示 但我将 vim 用于非代码文本文件 并且我希望看到它们也突出显示 TO
  • 使用 Hibernate 预防 SQL 注入

    我有一个现有的代码 其中应用程序根据许多条件生成不同的 sql 并通过 hibernate 会话 createSQLQuery 执行它们 在这里 参数与驻留在 java 类中的 sql 字符串连接 作为普通字符串替换 现在的问题是我需要防止
  • 运行 fatjar 时无法加载 log4j2

    我正在开发一个使用 log4j2 日志记录的项目 在 intellij 中开发时 一切正常 并且日志记录按预期完成 log4j2 xml 通过在启动时通过 intellij 设置传递给 jvm 的 java 属性进行链接 但是一旦我尝试运行
  • 如何在 GKE 上配置 Ingress 请求超时

    我目前在 GKE k8s 1 2 上配置了一个 Ingress 用于将请求转发到我的应用程序的 Pod 我有一个可能需要很长时间的请求 30秒 和我的应用程序超时 504 我观察到 这样做时 我收到的响应不是我自己的 504 而是来自看起来
  • 机架 Web 服务器和 https:教程?

    任何人都可以提供使用 Ruby RACK Web 服务器处理 https 和 installint 证书等设置的描述或教程的链接吗 Thanks Rack 不是网络服务器 它是网络服务器 如 Apache nginx 和应用程序中间件之间的
  • 我可以获得`FILE*`的访问模式吗?

    我必须复制一个FILE Mac OS X 上的 C 语言 使用 POSIXint不幸的是 文件描述符一直是不可能的 所以我想出了以下函数 static FILE fdup FILE fp const char mode int fd fil
  • iPhone X中为什么页面推送动画Tabbar上移

    我构建了一个应用程序演示 在推送动画中使用 hidesBottomBarWhenPushed 隐藏 Tabbar But When I click Jump Button Tabbar move up like this VoidLess
  • 用于具有数字签名的 WSSecurity 的 SOAPHandler

    我正在尝试在 java 中创建一个 Soap 客户端 我必须使用我的私钥对 Soap 消息进行签名 我正在使用得到回复SoapUI with WS Security配置 我已导入 WSDL 并使用生成的类wsimport 我创建了一个SOA
  • 要安装 OpenType 字体,Windows 有哪些要求?

    利基编程问题 我正在通过字节制作来开发 OpenType 字体 而不是使用 Fontlab 或 FontForge 等设计工具 现在有一个自定义 OpenType CFF 字体 它实现了 Basic Latin unicode 块的子集 特
  • 让宏定义为函数返回值是不好的做法吗?

    使用定义为有条件返回值的宏有一个缺点 即仅查看客户端代码可能会在宏处退出 这一点并不明显 我正在考虑的用例是编写值和错误检查 如下所示 define WRITE CHK file param if write that returns ze
  • POST 请求中的 %5B 和 %5D 代表什么?

    我正在尝试编写一个Java 类来登录某个网站 登录的POST请求中发送的数据是 user 5Blogin 5D username user 5Bpassword 5D 123456 我很好奇是什么 5B and 5D意味着在钥匙用户登录 我
  • AWS Redis 从外部连接

    有没有办法从外部 AWS 网络连接 AWS 上托管的 Redis 实例 我有一个基于 Windows 的 EC2 实例在 AWS 上运行 另一个是 Redis 缓存节点 我知道有人问过这个问题 但答案是在基于 Linux 的系统中 但我的是
  • 在 PL/SQL 存储过程中拆分逗号分隔的字符串

    我有 CSV 字符串 100 01 200 02 300 03 我需要将其传递给 Oracle 中的 PL SQL 存储过程 在过程中 我需要将这些值插入表中的数字列中 为此 我从这里得到了一个工作方法 如何在 oracle 9i 中最好地
  • PHP MYSQL - 根据行号是否匹配行号填充 HTML 表编号行

    所以 基本上我正在尝试制作数据中心驾驶室图 我们有一个 Excel 电子表格 但它不容易更新 也不容易搜索 我的 MySQL 数据库中有三个表 数据库是 机架 表格是 机柜 设备和数据中心 每个表格中的每一行代表它是什么 机柜表有一列指定其
  • 如何中断无限循环

    虽然我知道这样问有点傻 但我仍然想更多地了解它的技术角度 无限循环的一个简单示例 public class LoopInfinite public static void main String args for System out pr
  • 使用 Iframe 的自定义用户代理

    是的 我已经读过使用不同的用户代理加载 iframe 内容 https stackoverflow com questions 12845445 load iframe content with different user agent但我