当元素被扩展程序或广告拦截器删除时显示占位符内容
Displaying placeholder content when an element is removed by an extension or adblocker
我试图将一些用户反馈工具集成到我们的应用程序中,其中一部分需要将 iframe 嵌入到应用程序中。我正在使用 Privacy Badger,它会阻止 iframe 的所有内容,并始终将显示 属性 更改为 none
。一切都很好,我并不是要强制执行过去的人们隐私扩展,但是我确实希望能够检测它是否已被删除,并且只显示一些占位符文本,例如“这已被广告拦截器删除。感觉如果您有任何反馈意见,请随时给我们发送电子邮件”,这样应用程序就不会被损坏。
我目前的尝试:Code Sandbox
然而,这并没有像我希望的那样显示回退。
我已经尝试过这种方法的各种版本,但都没有成功。
基本上我想要的是:
检测 iframe 元素是否将其显示 属性 设置为 none
,如果是,则在其位置呈现回退。
问题是您立即检查样式是否为 none,但您的测试直到 5 秒后才更改它,因此您必须等待一段时间才能检查样式。
import React, { useState } from "react";
import ReactDOM from "react-dom";
function App() {
const [fallback, setFallback] = useState(0);
const setNoneDisplay = () => {
const el = document.getElementById("red-rover");
el.style.display = "none";
};
React.useEffect(() => {
window.setTimeout(setNoneDisplay, 5000);
});
const refCallback = React.useCallback((node) => {
if (node) setTimeout(() => setFallback(node.style.display === "none"), 6000);
}, []);
return (
<div className="App">
<div id="red-rover" ref={refCallback}>
Displayed
</div>
{fallback ? <div>Only Displayed As Fallback</div> : null}
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
我试图将一些用户反馈工具集成到我们的应用程序中,其中一部分需要将 iframe 嵌入到应用程序中。我正在使用 Privacy Badger,它会阻止 iframe 的所有内容,并始终将显示 属性 更改为 none
。一切都很好,我并不是要强制执行过去的人们隐私扩展,但是我确实希望能够检测它是否已被删除,并且只显示一些占位符文本,例如“这已被广告拦截器删除。感觉如果您有任何反馈意见,请随时给我们发送电子邮件”,这样应用程序就不会被损坏。
我目前的尝试:Code Sandbox
然而,这并没有像我希望的那样显示回退。
我已经尝试过这种方法的各种版本,但都没有成功。
基本上我想要的是:
检测 iframe 元素是否将其显示 属性 设置为 none
,如果是,则在其位置呈现回退。
问题是您立即检查样式是否为 none,但您的测试直到 5 秒后才更改它,因此您必须等待一段时间才能检查样式。
import React, { useState } from "react";
import ReactDOM from "react-dom";
function App() {
const [fallback, setFallback] = useState(0);
const setNoneDisplay = () => {
const el = document.getElementById("red-rover");
el.style.display = "none";
};
React.useEffect(() => {
window.setTimeout(setNoneDisplay, 5000);
});
const refCallback = React.useCallback((node) => {
if (node) setTimeout(() => setFallback(node.style.display === "none"), 6000);
}, []);
return (
<div className="App">
<div id="red-rover" ref={refCallback}>
Displayed
</div>
{fallback ? <div>Only Displayed As Fallback</div> : null}
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);