1
0
Fork 0
mirror of https://github.com/gorhill/uMatrix.git synced 2024-06-28 11:00:38 +12:00

Use different page navigation detection for Safari

The beforeNavigate event wasn't reliable (sometimes didn't fire, sometimes
fired unnecessary when opening a link with the middle click - which had a
workaround previously, but that's also removed by this commit).

When the event didn't fire, the bindTabToPageStats method didn't run,
and the requests related to the tab weren't blocked.
This commit is contained in:
Deathamns 2014-11-02 19:02:00 +01:00 committed by gorhill
parent ceb18d4629
commit bda4dba902

View file

@ -390,7 +390,8 @@ if (self.chrome) {
if (typeof onNavigation === 'function') {
this.onNavigation = function(e) {
// e.url is not present for local files or data URIs
// e.url is not present for local files or data URIs,
// or probably for those URLs which we don't have access to
if (!e.target || !e.target.url) {
return;
}
@ -740,11 +741,6 @@ if (self.chrome) {
return e.message;
}
if (e.message.middleClickURL) {
vAPI.lastMiddleClick = e.message;
return;
}
// blocking unwanted pop-ups
if (e.message.type === 'popup') {
if (typeof vAPI.tabs.onPopup === 'function') {
@ -790,39 +786,8 @@ if (self.chrome) {
return e.message;
};
safari.application.addEventListener('message', this.onBeforeRequest.callback, true);
// 'main_frame' simulation, since this isn't available in beforeload
safari.application.addEventListener('beforeNavigate', function(e) {
// e.url is not present for local files or data URIs
if (e.url) {
// beforeNavigate fires twice when opening a link with
// middle click. Once with the same tab, second time with
// the new tab. This hack tries to ignore the first one.
if (vAPI.lastMiddleClick) {
if (e.target === safari.application.activeBrowserWindow.activeTab
&& e.timeStamp - vAPI.lastMiddleClick.timeStamp <= 500
&& e.url === vAPI.lastMiddleClick.middleClickURL) {
vAPI.lastMiddleClick = null;
return;
}
vAPI.lastMiddleClick = null;
}
vAPI.net.onBeforeRequest.callback({
name: 'canLoad',
target: e.target,
message: {
url: e.url,
type: 'main_frame',
frameId: 0,
parentFrameId: -1,
timeStamp: e.timeStamp
}
}) || e.preventDefault();
}
}, true);
}
}
};