我目前正在尝试更改这个Google-tasks小工具的样式元素:
https://mail.google.com/tasks/ig使用chrome内容脚本。
在本例中,我删除了底部的工具栏。因为Google使用javascript生成HTML,并将其放在iframe中。我需要使用以下代码:
document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById(':1.ft').style.display = 'none'当您从开发人员控制台运行此代码时,它会隐藏工具栏。但它不能作为内容脚本工作。
我认为这是因为代码是在页面准备好之前运行的。因此,我尝试使用事件侦听器:
document.addEventListener("DOMContentLoaded", function () {
document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById(':1.ft').style.display = 'none'
}, false);但这也不管用。我还尝试了事件侦听器'domready‘和'load’。但它们都不起作用。
如何获取该元素?
发布于 2012-08-25 10:34:50
在这种情况下,您只需确保将此样式规则应用于适当的iframe,而不必担心何时加载:
#:1.ft {display: none !important;}(^_^)
但是,对于src="javascript: ...的iframe来说,这可能是不可能的。
在更一般的情况下。如果该节点(或其包含的iframe)是由AJAX加载的,那么毫无疑问,它会出现在'domready‘甚至'load’之后很久。
久经考验的解决方案是轮询元素:
var waitForElementIntrvl = setInterval (checkForElement, 333);
function checkForElement () {
var firstIframe = document.querySelector ("iframe");
if (firstIframe) {
var targElement = firstIframe.contentWindow.document.getElementById (':1.ft');
if (targElement) {
targElement.style.display = 'none';
clearInterval (waitForElementIntrvl);
}
}
}但是:
Google Chrome内容-脚本仍然不能很好地处理iframed DOM,因此,为了让代码正常工作,必须将其注入到目标页面中。最终的内容脚本代码变成:
function userscriptMain () {
var waitForElementIntrvl = setInterval (checkForElement, 333);
function checkForElement () {
var firstIframe = document.querySelector ("iframe");
if (firstIframe) {
var targElement = firstIframe.contentWindow.document.getElementById (':1.ft');
if (targElement) {
targElement.style.display = 'none';
clearInterval (waitForElementIntrvl);
}
}
}
}
addJS_Node (null, null, userscriptMain);
function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}https://stackoverflow.com/questions/12111455
复制相似问题