【发布时间】:2014-10-14 07:13:11
【问题描述】:
我有一个页面,其中包含 4 个 iframe。我想使用 jQuery(或纯 JavaScript)循环遍历所有这些 iframe(我不知道它们的 ID)和主框架并删除具有指定类名的元素。我将调用此函数从 Chrome 扩展程序中删除这些元素。
我该怎么做?感谢您的任何回答。
【问题讨论】:
标签: javascript jquery iframe
我有一个页面,其中包含 4 个 iframe。我想使用 jQuery(或纯 JavaScript)循环遍历所有这些 iframe(我不知道它们的 ID)和主框架并删除具有指定类名的元素。我将调用此函数从 Chrome 扩展程序中删除这些元素。
我该怎么做?感谢您的任何回答。
【问题讨论】:
标签: javascript jquery iframe
使用这些函数,并将 '.class-name' 替换为您的类名(您可以使用任何 jQuery 选择器)。
var getIFrameDocument = function(iframe) {
var doc;
try {
if ((typeof InstallTrigger !== 'undefined') && (iframe.contentDocument)) { // Firefox, Opera
doc = iframe.contentDocument;
} else if (iframe.contentWindow) { // Internet Explorer
doc = iframe.contentWindow.document;
} else if (iframe.document) { // Others?
doc = iframe.document;
}
} catch(e) {
}
return doc;
};
var findElementRecursively = function(selector, doc) {
try { /* Helps prevent errors like "Permission denied to access property 'jquery'" */
var element = jQuery(selector, doc);
} catch (e) {
return null;
}
if (element.length !== 0) {
return element;
}
try {
if (doc && doc.location === 'about:blank') {
return null;
}
} catch (e) {
}
try { /* Helps prevent errors like "Permission denied to access property 'jquery'" */
var iframes = jQuery("iframe", doc);
} catch (e) {
return null;
}
var result = [];
for (var i = 0; i < iframes.length; i++) {
var iframeDoc = getIFrameDocument(iframes[i]);
if (!(typeof(iframeDoc) === 'undefined')) {
element = findElementRecursively(selector, iframeDoc);
if (!(element === null)) {
for (var j = 0; j < element.length; j++) {
result.push(element[j]);
}
}
}
}
if (result.length > 0) {
return jQuery(result);
} else {
return null;
}
};
var element = findElementRecursively('.class-name', document);
if ((!(element === null)) && (element.length > 0)) {
// element.remove(); // I'm not sure if this works.
element.each(function() {
jQuery(this).remove();
});
}
【讨论】:
return element;”替换为“result.push(element);”并将“var result = [];”移动到顶部功能。并且不要在catch 中使用return null。
找到 iFrame 并使用 .contents():
$(document).ready(function() {
$(iframe).contents().find(element).html(code);
});
用您的值替换 iframe、element 和 code。
可能的解决方案:
$(document).ready(function() {
$.each('iframe', function(k, v) {
$(this).contents().find('div').html('Hello, world!');
});
});
【讨论】:
使用 jQuery,您可以这样实现:
$("iframe").each(function() {
$(this).contents().find("element.classname").remove();
});
【讨论】:
类似这样的:
var
i, len,
target_class = 'class_name',
$iframes = $( 'iframe', top.document ); // <-- add top.document
for ( i = 0, len = $iframes.length; i < len; ++i ) {
$iframes.eq( i ).contents().find( '.'+ target_class ).remove();
}
$( '.'+ target_class, top.document ).remove(); // <-- add top.document
或使用原版 js:
var
i, len,
target_class = 'class_name',
iframes = top.document.getElementsByTagName( 'iframe' ), // <-- add top.document
removeByClass = function ( doc, class_name ) {
var i, len, el,
toRemoves = doc.getElementsByClassName( class_name );
for ( i = 0, len = toRemoves.length; i < len; ++i ) {
el = toRemoves[ i ];
if ( el.parentNode ) {
el.parentNode.removeChild( el );
}
}
};
for ( i = 0, len = iframes.length; i < len; ++i ) {
removeByClass( iframes[ i ].contentDocument, target_class );
}
removeByClass( top.document, target_class ); // <-- add top.document
编辑 添加了从 iframe 内部调用的可能性,但它们必须来自同一个域!!
【讨论】:
document.domain
此解决方案的工作原理与 iFrame 相同。我创建了一个 PHP 脚本,可以从其他网站获取所有内容,最重要的是您可以轻松地将自定义 jQuery 应用于该外部内容。请参考以下脚本,该脚本可以从其他网站获取所有内容,然后您也可以应用您的自定义 jQuery/JS。此内容可以在任何地方、任何元素或任何页面内使用。
<div id='myframe'>
<?php
/*
Use below function to display final HTML inside this div
*/
//Display Frame
echo displayFrame();
?>
</div>
<?php
/*
Function to display frame from another domain
*/
function displayFrame()
{
$webUrl = 'http://[external-web-domain.com]/';
//Get HTML from the URL
$content = file_get_contents($webUrl);
//Add custom JS to returned HTML content
$customJS = "
<script>
/* Here I am writing a sample jQuery to hide the navigation menu
You can write your own jQuery for this content
*/
//Hide Navigation bar
jQuery(\".navbar.navbar-default\").hide();
</script>";
//Append Custom JS with HTML
$html = $content . $customJS;
//Return customized HTML
return $html;
}
【讨论】: