在 Chrome 上更改具有 src="about:blank" 的 iframe 内容的 CSS

2024-01-01

我正在尝试这段代码来应用新设计the 谷歌任务 page https://mail.google.com/tasks/canvas with 扩展 Tampermonkey https://tampermonkey.net/.

当我尝试时html{ display: none !important }然后它什么也不显示html标签不在下面iframe。 但是,我无法修改iframe[src="about:blank"]元素。 我应该如何修改才能使其发挥作用?


镜头 1.:不适用于内部iframe[src="about:blank"]

// ==UserScript==
// @name     test
// @match    https://mail.google.com/tasks/canvas
// @match    about:blank
// @grant    GM_addStyle
// ==/UserScript==

GM_addStyle ( `    
* {color: red !important}
` );

是的,为 iframe 编写脚本src="about:blank"可能会很棘手,因为正常的用户脚本机制的工作方式不同。 (现在, @match about:blank不起作用 https://github.com/Tampermonkey/tampermonkey/issues/312,但无论如何在这里使用它都是一个坏主意,因为它会产生全局副作用。)

幸运的是,在 Chrome 上,iframe 具有src="about:blank"几乎总是有一个documentElement当 Tampermonkey 脚本运行时,因此您通常不需要等待只需添加 CSS.

Here is 一个完整的工作脚本,第一个 iframe 的样式:

// ==UserScript==
// @name    _Style iframe with src="about:blank"
// @match   https://mail.google.com/tasks/canvas
// @grant   none
// ==/UserScript==

//-- Adjust the following selector to match your page's particulars, if needed.
var targetFrame = document.querySelector ("iframe[src='about:blank']")
if (targetFrame) {
    addStyleToFrame (
        `* {color: red !important}`
        , targetFrame
    );
}

function addStyleToFrame (cssStr, frmNode) {
    var D               = frmNode.contentDocument;
    var newNode         = D.createElement ('style');
    newNode.textContent = cssStr;

    var targ    = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (newNode);
}



If the <iframe>标签是由 javascript 创建的,或者其他延迟妨碍了上述操作...

Use the iframeSelector的参数waitForKeyElements https://gist.github.com/BrockA/2625891解决这个问题。

技巧是选择一个始终出现在完成的 iframe 中的节点,并将其传递给 waitForKeyElements。
该节点应该是唯一的。
但对于下面的例子我使用了.goog-toolbar:first作为快速的第一次尝试。

这是完整的工作脚本:

// ==UserScript==
// @name     _Style iframe with src="about:blank"
// @match    https://mail.google.com/tasks/canvas
// @require  https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// @grant    GM.getValue
// ==/UserScript==
//- The @grant directives are needed to restore the proper sandbox.

const desiredStyles = `* {color: red !important;}`;

waitForKeyElements (
    ".goog-toolbar:first",
    addCSS_Style,
    false,
    "iframe[src='about:blank']"
);

function addCSS_Style (jNode) {
    var frmBody = jNode.closest ("body");
    //-- Optionally add a check here to avoid duplicate <style> nodes.
    frmBody.append (`<style>${desiredStyles}</style>`);
}

Notes:

  1. GM_addStyle()在这种情况下不起作用,因此我们添加具有框架感知功能的样式。
  2. Google 页面使用:多个嵌套的 iframe;复杂的页面(重新)修改; HTML 的“信息气味”很差。简而言之,它们是邪恶的、不断变化的,并且编写脚本可能会很痛苦。因此,这个简单的示例将起作用,但这就是这个问题范围内的全部内容。对于更复杂的场景,提出一个新问题并手头上有足够的啤酒钱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Chrome 上更改具有 src="about:blank" 的 iframe 内容的 CSS 的相关文章

  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 我可以停止 :hover 应用于元素吗?

    假设我有一些 CSS button hover font weight bold 我怎样才能防止 hover随意应用样式 我的目标用例是当元素被禁用时 例如 使用这个 HTML
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • HTML 默认图像大小

    我在我的代码上显示 3 张图片 图片具有不同的尺寸 宽度和高度 div class row div class col lg 12 h2 class page header Gallery h2 div div class col md 4
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 为 Windows Mobile 编译时找不到引用的程序集

    我决定使用tessnet2 http www pixel technology com freeware tessnet2 我的 Windows Mobile 6 项目的库 不幸的是 当我尝试编译它时 它抛出一个错误 tessnet2 Te
  • 如何根据列的变化值对记录进行分组/排名?

    我有下表按 ID 年份 DESC 排序 Id Year Valid 1 2011 1 1 2010 1 1 2009 0 1 2002 1 4 2013 1 4 2012 1 4 2011 1 etc 我想要的是一个额外的排名字段 例如 I
  • 将 google play 服务添加到项目后无法运行项目

    我正在制作一个需要谷歌地图的Android应用程序 我在 Eclipse 中创建了一个新项目并在 Android 手机上编译它 它工作了 但是当我将 google play services lib 导入到我的工作区并在我的项目中添加对它的
  • 如何添加监听多个按钮的动作监听器

    我试图找出我对动作监听器做错了什么 我正在遵循多个教程 但当我尝试使用操作侦听器时 netbeans 和 eclipse 给了我错误 下面是一个简单的程序 我试图让一个按钮在其中工作 我究竟做错了什么 import java awt eve
  • 使用 Jinja 循环项目,每 5 个项目后添加 div

    Problem 我有 100 个高尔夫球场的列表 我希望插入一个 div 其中每五个球场后包含一个广告图像 我该怎么做呢 更新 1 content html 修订后的最新版本 我已经更新了我的原始代码片段 因为 leovp 的 建议在下面编
  • 如何仅倾斜/倾斜 div 的底部

    我一直在尝试在 div 的底部添加倾斜 倾斜 我取得了一些成功 正如您在下面的 JSFiddle 中看到的那样 我成功地应用了倾斜 但这并不完全是我想要的 https jsfiddle net hcow6kjr https jsfiddle
  • OAuthException:(#12) v2.0 及更高版本已弃用事件管理 API

    当我通过离线发布将事件发布到我的墙上时 我陷入了此错误OAuthException 12 events management API is deprecated for versions v2 0 and higher 您无法再使用 Gra
  • Scala 字节的十六进制文字

    包含 A F 数字的十六进制文字默认转换为 int 当我试图用以下方法声明一个 Int 时0x它正在正确创建 val a Int 0x34 val b Int 0xFF 但是当我尝试声明一个字节时0x第二行未编译 val a Byte 0x
  • 为什么浏览器在这里低效地发出 2 个请求?

    我注意到 ajax 和图像加载有些奇怪 假设页面上有一张图像 并且 ajax 请求相同的图像 人们会猜测 ajax 请求会命中浏览器缓存 或者它至少应该只发出一个请求 生成的图像将发送到页面和想要的脚本读取 处理图像 令人惊讶的是 我发现即
  • Hibernate Criteria API - 访问连接属性

    我有一个非常复杂的标准 我用它来检索 排序和分页服务器端数据 我摘录了以下内容 create criteria over a bunch of tables Criteria testCriteria getSession createCr
  • Google 应用引擎禁用请求日志记录

    我正在寻找一种方法来过滤掉请求日志垃圾邮件 以便我可以更轻松地看到警告或错误 这似乎在本地有效 loggers django handlers console level WARNING 但GAE失败 根据这个问题 https stacko
  • 错误:将“char*”分配给“char [20]”时类型不兼容

    我是这个 C 环境的新手 并且我的构造函数遇到了困难 这是我的代码 class Student char name 20 long number public Student char nm 20 long val name nm numb
  • 无法在 Airflow UI 中编辑 Spark_default

    我正在尝试使用以下存储库运行 Airflow 和 Spark 的容器化应用程序 https github com cordon thiago airflow spark https github com cordon thiago airf
  • sys.exit 对于多线程到底有什么作用?

    我对 python 中的 sys exit 感到非常困惑 在python 文档 https docs python org 2 library sys html 它说 退出Python 这是否意味着当sys exit 在python程序中调
  • 什么是浏览器二进制管理器如何将其用于 Selenium

    我最近知道使用 WebDriver Binaries 管理器是自动化项目中的一个很好的实践 但不确定这是什么以及如何使用 也做了一些谷歌搜索 并得到了很多关于如何管理二进制文件的帖子 但没有说明为什么使用 因此 如果有人能够指导它及其好处
  • 将一个文件的内容以换行符分隔附加到另一个文件

    我想 我正在尝试复制cat以与平台无关的方式使用 Linux shell 的功能 这样我就可以获取两个文本文件并按以下方式合并它们的内容 file 1 包含 42 bottles of beer on the wall file 2 包含
  • 使用RavenDB作为持久缓存

    我目前有一个 Web 应用程序 它在内存中缓存大量数据 数十万个条目 以供快速查找 然后在 SQL Server 中作为持久缓存 基本上 该信息由地址的地理编码组成 其中地理编码是通过远程 Web 服务检索的 如果需要连续调用而不是缓存 则
  • 如何使用libpcap中的“pcap_lookupdev()”?

    代码找不到任何设备 我想知道 pcap lookupdev 是做什么的 谢谢 include
  • fork() 之后地址、值和指针会发生什么

    我正在研究一个问题 我要在某个问题之前和之后检查价值观并解决问题fork 在 C 中调用 我的方法是显示变量值和地址 假设在fork 令我惊讶的是 上述变量的地址保持不变 我的问题是为什么它们是相同的 如果我更改子项中的变量会发生什么 父母
  • 在 Chrome 上更改具有 src="about:blank" 的 iframe 内容的 CSS

    我正在尝试这段代码来应用新设计the 谷歌任务 page https mail google com tasks canvas with 扩展 Tampermonkey https tampermonkey net 当我尝试时html di