这取决于网站如何加载广告。
对于 goodreads,它们的 HTML 包含来自广告提供商的 javascript。具体来说,read 返回的 HTML 文档的第 81-145 行https://www.goodreads.com/
:
<script>
//<![CDATA[
var gptAdSlots = gptAdSlots || [];
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function() {
var gads = document.createElement("script");
gads.async = true;
gads.type = "text/javascript";
var useSSL = "https:" == document.location.protocol;
gads.src = (useSSL ? "https:" : "http:") +
"//securepubads.g.doubleclick.net/tag/js/gpt.js";
var node = document.getElementsByTagName("script")[0];
node.parentNode.insertBefore(gads, node);
})();
// page settings
//]]>
</script>
<script>
//<![CDATA[
googletag.cmd.push(function() {
googletag.pubads().setTargeting("sid", "osid.bd63050e605ccee9f21515a2dedfdaea");
googletag.pubads().setTargeting("grsession", "osid.bd63050e605ccee9f21515a2dedfdaea");
googletag.pubads().setTargeting("surface", "desktop");
googletag.pubads().setTargeting("signedin", "false");
googletag.pubads().setTargeting("gr_author", "false");
googletag.pubads().setTargeting("author", []);
googletag.pubads().enableAsyncRendering();
googletag.pubads().enableSingleRequest();
googletag.pubads().collapseEmptyDivs(true);
googletag.pubads().disableInitialLoad();
googletag.enableServices();
});
//]]>
</script>
<script>
//<![CDATA[
! function(a9, a, p, s, t, A, g) {
if (a[a9]) return;
function q(c, r) {
a[a9]._Q.push([c, r])
}
a[a9] = {
init: function() {
q("i", arguments)
},
fetchBids: function() {
q("f", arguments)
},
setDisplayBids: function() {},
_Q: []
};
A = p.createElement(s);
A.async = !0;
A.src = t;
g = p.getElementsByTagName(s)[0];
g.parentNode.insertBefore(A, g)
}("apstag", window, document, "script", "//c.amazon-adsystem.com/aax2/apstag.js");
apstag.init({
pubID: '3211', adServer: 'googletag', bidTimeout: 4e3
});
//]]>
</script>
因此,广告商的 javascript 代码在与网站本身相同的执行上下文中运行,并且可以做网站可以做的所有事情,包括观察您与网站的所有交互。
如果他们通过嵌入来自不同来源的 iframe 来加载广告,则广告商的代码将在其自己的执行上下文中运行,并且浏览器将阻止对周围网站的访问,因为这违反了同源政策。
一般来说,判断网站是否隔离了广告商代码的唯一方法是检查网站的代码。