gpt4 book ai didi

javascript - 如何从 chrome 扩展程序访问 iframe?

转载 作者:行者123 更新时间:2023-11-30 15:18:35 26 4
gpt4 key购买 nike

如何让我的扩展程序像 adblock 一样在所有框架上工作?

我尝试将 "all_frames": true 添加到我的 list 文件中,但没有成功。

我尝试使用此代码获取具有特定 ID 的文本:

var theId = "starts with something";
var myArray = [];
$('[id^="theId"]').each(function(i, obj) {
myArray.push($(this).text());
});

$.unique(myArray);

console.log(myArray);

但它说我的数组是空的。当我检查页面上的元素时,我看到一个“顶层”层和一个“目标内容”层。该代码仅在我在“目标内容”层的控制台中执行时才有效。我可以在内容脚本中使用此代码,还是需要以某种方式使用 background.js?

最佳答案

Continued from SO44122853

我看到您发现内容是在 iframe 中加载的。所以我这里有一个工作演示 PLUNKER ,这里的代码片段是为了防止 plunker 出现故障。

详情在 中评论 PLUNKER

演示

由于需要运行 2 个单独的页面而无法运行

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=no">
<style></style>
</head>

<body>
<!--iframe is same as the one on the site, with the exception
of the src-->

<iframe id="ptifrmtgtframe" name="TargetContent" title="Main Content" frameborder="0" scrolling="auto" width='90%' src="tables.html"></iframe>

<!--The data is displayed as a one string-->
<output id='display'></output>

<script>

// Reference the iframe
var iFID = document.getElementById("ptifrmtgtframe");
// Register the load event on iframe
iFID.onload = function(e) {
// Callback is extractText function
return extractText('#ptifrmtgtframe', '#display', '.PSLONGEDITBOX');
}

/* Pass iframe and display as a single selector
|| Pass targets as a multiple selector
*/
function extractText(iframe, display, targets) {
var iArray = [];
var iFrame = document.querySelector(iframe);
var iView = document.querySelector(display);
var iNode = "";

/* .contentWindow is property that refers to content
|| that is in an iframe. This is the heart of the
|| demo.
*/
var iContent = iFrame.contentDocument || iFrame.contentWindow.document;
var iTarget = iContent.querySelectorAll(targets);

/* .map() will call a function on each element
|| and return a new array as well.
*/
Array.from(iTarget).map(function(node, idx) {

iNode = node.textContent;
iView.textContent += iNode;
iArray.push(iNode);
return iArray;
});
console.log(iArray);
}
</script>
</body>

关于javascript - 如何从 chrome 扩展程序访问 iframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com