【发布时间】:2015-11-24 10:57:58
【问题描述】:
我正在创建广告拦截器。我只是想自动在“内容拦截器”的 safari 扩展上。我浏览了示例,但没有找到任何解决方案。有什么办法可以“开启”扩展或者我们必须手动启动它?
【问题讨论】:
标签: ios safari extension-methods adblock
我正在创建广告拦截器。我只是想自动在“内容拦截器”的 safari 扩展上。我浏览了示例,但没有找到任何解决方案。有什么办法可以“开启”扩展或者我们必须手动启动它?
【问题讨论】:
标签: ios safari extension-methods adblock
在 iOS 上,Safari 内容拦截器默认处于禁用状态。
无法从您的应用中自动启用它们。您必须指示用户:
打开设置应用。
转到 Safari > 内容拦截器。
打开内容拦截器扩展。
在 macOS(自 10.12 起)上,适用类似规则:默认情况下禁用 Content Blocker 扩展程序(与您的应用程序捆绑),并且必须在 Safari 中由用户切换首选项 > 扩展。
【讨论】:
假设您想测试您的“个人 AdBlock 程序”,首先准备一个虚拟 HTML,使用此行 <div class="ads">hello</div>,
接下来应用您的“个人 AdBlock 程序”,假设它是基于 JavaScript/CSS 的而不是类似代理的,您可以隐藏或从 DOM 中删除元素(节点)。
例如:
document.querySelector('div[class*="ads"]') -- 这是一种很好且(非常)通用的查找元素的方法。
这是隐藏“广告”的方法
document.querySelector('div[class*="ads"]').style.display="none";
或者,为了使其更强大,与页面上的其他规则相关,使其成为本地样式 + 重要通知器:document.querySelector('div[class*="ads"]').style.cssText="display:none !important;" ;
您还可以从 DOM 中删除元素(节点):
var e = document.querySelector('div[class*="ads"]') 关注:
e.parentNode.removeChild(e);
现在,您可能希望看到“您的 ADBLOCK”有效,
稍后(在页面加载并运行您的 javascript 代码之后)键入:
console.log(null === document.querySelector('div[class*="ads"]') ? "removed(success)" : "still here(failed)")
请注意,对于这个示例(为简单起见),我假设页面中只有一个具有该类的 div(避免循环 :))。
如果您只是要隐藏该元素,您应该查询其当前(最新)样式条件,使用window 下存在的本机方法:
console.log("none" === window.getComputedStyle(document.querySelector('div[class*="ads"]')) ? "hidden(success)" : "still here(failed)")
享受吧!
【讨论】: