<div dir="ltr"><div>Hi!</div><div><br></div><div>There is an issue with the way content blockers present blocked requests to the requesters.</div><div><br>Usually (e.g. for all other browsers) when request is blocked by add-on or extension it looks like an error to the page code. For instance, &quot;onerror&quot; is called for XMLHttpRequest and &quot;element.onerror&quot; callback is called for the DOM element if it&#39;s load is blocked by the ad blocker.</div><div><br></div><div>This is a common behavior and it&#39;s handled by web developers.</div><div><br></div><div>In case of Safari content blocker &quot;onerror&quot; event is not raised and it may seem that request is successful while it is not.</div><div><br></div><div>Here is an example.</div><div><br></div><div>This is a rule blocking access to <span style="font-family:monospace,monospace"><a href="http://visualwebsiteoptimizer.com">visualwebsiteoptimizer.com</a> </span>domain.</div><div>This domain is a known tracker so you can see this rule in all &quot;privacy&quot; related filter lists like EasyPrivacy and such.</div><div><div><font face="monospace, monospace">[</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">        </span>{</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                </span>&quot;trigger&quot;: {</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                        </span>&quot;url-filter&quot;: &quot;^https?://[^.]+\\.?visualwebsiteoptimizer\\.com[/:&amp;?]?&quot;,</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                        </span>&quot;load-type&quot;: [</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                                </span>&quot;third-party&quot;</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                        </span>]</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                </span>},</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                </span>&quot;action&quot;: {</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                        </span>&quot;type&quot;: &quot;block&quot;</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">                </span>}</font></div><div><font face="monospace, monospace"><span class="" style="white-space:pre">        </span>}</font></div><div><font face="monospace, monospace">]</font></div></div><div><br></div><div>But it can&#39;t be used in Safari because the &quot;silent&quot; blocking breaks entire website which use <span style="font-family:monospace,monospace"><a href="http://visualwebsiteoptimizer.com">visualwebsiteoptimizer.com</a></span>. Examples of such websites: </div><div><a href="http://info.singtel.com">http://info.singtel.com</a></div><div><a href="http://www.harveynorman.com.au">http://www.harveynorman.com.au</a></div><div><br></div><div>Here is a code used by them:</div><div><a href="http://pastebin.com/awYa9s95">http://pastebin.com/awYa9s95</a><br></div><div><br></div><div>As you can see they handle &quot;onerror&quot; callback, but it&#39;s not fired in Safari so the &quot;body&quot; element remains hidden.</div><div><br></div><div>Btw, this issue also causes significant delays when ads are blocked on Youtube. They also are waiting for &quot;onerror&quot; callback to fire, but as it is not fired, video does not start until &quot;ontimeout&quot; is fired.</div><br clear="all"><div><div class="gmail_signature"><div dir="ltr">--<br>wbr, Andrey Meshkov</div></div></div>
</div>