mirror of
https://github.com/agam778/MS-365-Electron.git
synced 2026-02-17 09:02:10 +00:00
Add setting for external link handling
Introduced an option for users to open external links in their default browser rather than within the app. Enabled by default, can be configured in menu. #240
This commit is contained in:
@@ -454,6 +454,20 @@ const commonPreferencesSubmenu = [
|
|||||||
},
|
},
|
||||||
checked: getValue("blockadsandtrackers") === "true",
|
checked: getValue("blockadsandtrackers") === "true",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: "Open External Links in Default Browser",
|
||||||
|
type: "checkbox",
|
||||||
|
click: () => {
|
||||||
|
setValue("externalLinks", getValue("externalLinks") === "true" ? "false" : "true");
|
||||||
|
dialog.showMessageBoxSync({
|
||||||
|
type: "info",
|
||||||
|
title: "External Links in Default Browser",
|
||||||
|
message: `External links will now open in ${getValue("externalLinks") === "true" ? "your default browser" : "MS-365-Electron"}`,
|
||||||
|
buttons: ["OK"],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
checked: getValue("externalLinks") === "true",
|
||||||
|
},
|
||||||
{ type: "separator" },
|
{ type: "separator" },
|
||||||
{
|
{
|
||||||
label: "Windows User-Agent String",
|
label: "Windows User-Agent String",
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ getValueOrDefault("windowWidth", 0.71);
|
|||||||
getValueOrDefault("windowHeight", 0.74);
|
getValueOrDefault("windowHeight", 0.74);
|
||||||
getValueOrDefault("customWindowSize", false);
|
getValueOrDefault("customWindowSize", false);
|
||||||
getValueOrDefault("aptabaseTracking", null);
|
getValueOrDefault("aptabaseTracking", null);
|
||||||
|
getValueOrDefault("externalLinks", "true");
|
||||||
|
|
||||||
if (getValue("enterprise-or-normal") === "https://microsoft365.com/?auth=1") {
|
if (getValue("enterprise-or-normal") === "https://microsoft365.com/?auth=1") {
|
||||||
setValue("enterprise-or-normal", "?auth=1");
|
setValue("enterprise-or-normal", "?auth=1");
|
||||||
|
|||||||
125
app/domains.json
Normal file
125
app/domains.json
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
{
|
||||||
|
"domains": [
|
||||||
|
"*.1drv.ms",
|
||||||
|
"*.microsoft365.com",
|
||||||
|
"*.office365.com",
|
||||||
|
"*.live.com",
|
||||||
|
"*.office.com",
|
||||||
|
"*.microsoftonline.com",
|
||||||
|
"*.onenote.com",
|
||||||
|
"*.onedrive.com",
|
||||||
|
"*.outlook.com",
|
||||||
|
"*.microsoft.com",
|
||||||
|
"*.cloud.microsoft",
|
||||||
|
"*.skype.com",
|
||||||
|
"*.clipchamp.com",
|
||||||
|
"*.sharepoint.com",
|
||||||
|
"*.yammer.com",
|
||||||
|
"*.outlook.cloud.microsoft",
|
||||||
|
"*.outlook.office.com",
|
||||||
|
"*.outlook.office365.com",
|
||||||
|
"*.protection.outlook.com",
|
||||||
|
"*.mail.protection.outlook.com",
|
||||||
|
"*.mx.microsoft",
|
||||||
|
"*.sharepointonline.com",
|
||||||
|
"*.storage.live.com",
|
||||||
|
"*.search.production.apac.trafficmanager.net",
|
||||||
|
"*.search.production.emea.trafficmanager.net",
|
||||||
|
"*.search.production.us.trafficmanager.net",
|
||||||
|
"*.wns.windows.com",
|
||||||
|
"*.admin.onedrive.com",
|
||||||
|
"*.officeclient.microsoft.com",
|
||||||
|
"*.g.live.com",
|
||||||
|
"*.oneclient.sfx.ms",
|
||||||
|
"*.spoprod-a.akamaihd.net",
|
||||||
|
"*.svc.ms",
|
||||||
|
"*.teams.microsoft.com",
|
||||||
|
"*.lync.com",
|
||||||
|
"*.keydelivery.mediaservices.windows.net",
|
||||||
|
"*.streaming.mediaservices.windows.net",
|
||||||
|
"*.mlccdn.blob.core.windows.net",
|
||||||
|
"*.aka.ms",
|
||||||
|
"*.users.storage.live.com",
|
||||||
|
"*.adl.windows.com",
|
||||||
|
"*.secure.skypeassets.com",
|
||||||
|
"*.mlccdnprod.azureedge.net",
|
||||||
|
"*.skype.com",
|
||||||
|
"*.compass-ssl.microsoft.com",
|
||||||
|
"*.officeapps.live.com",
|
||||||
|
"*.online.office.com",
|
||||||
|
"*.office.live.com",
|
||||||
|
"*.office.net",
|
||||||
|
"*.onenote.com",
|
||||||
|
"*.cdn.onenote.net",
|
||||||
|
"*.ajax.aspnetcdn.com",
|
||||||
|
"*.apis.live.net",
|
||||||
|
"*.www.onedrive.com",
|
||||||
|
"*.auth.microsoft.com",
|
||||||
|
"*.msftidentity.com",
|
||||||
|
"*.msidentity.com",
|
||||||
|
"*.account.activedirectory.windowsazure.com",
|
||||||
|
"*.accounts.accesscontrol.windows.net",
|
||||||
|
"*.adminwebservice.microsoftonline.com",
|
||||||
|
"*.api.passwordreset.microsoftonline.com",
|
||||||
|
"*.autologon.microsoftazuread-sso.com",
|
||||||
|
"*.becws.microsoftonline.com",
|
||||||
|
"*.ccs.login.microsoftonline.com",
|
||||||
|
"*.clientconfig.microsoftonline-p.net",
|
||||||
|
"*.companymanager.microsoftonline.com",
|
||||||
|
"*.device.login.microsoftonline.com",
|
||||||
|
"*.graph.microsoft.com",
|
||||||
|
"*.graph.windows.net",
|
||||||
|
"*.login-us.microsoftonline.com",
|
||||||
|
"*.login.microsoft.com",
|
||||||
|
"*.login.microsoftonline-p.com",
|
||||||
|
"*.login.microsoftonline.com",
|
||||||
|
"*.login.windows.net",
|
||||||
|
"*.logincert.microsoftonline.com",
|
||||||
|
"*.loginex.microsoftonline.com",
|
||||||
|
"*.nexus.microsoftonline-p.com",
|
||||||
|
"*.passwordreset.microsoftonline.com",
|
||||||
|
"*.provisioningapi.microsoftonline.com",
|
||||||
|
"*.hip.live.com",
|
||||||
|
"*.microsoftonline-p.com",
|
||||||
|
"*.msauth.net",
|
||||||
|
"*.msauthimages.net",
|
||||||
|
"*.msecnd.net",
|
||||||
|
"*.msftauth.net",
|
||||||
|
"*.msftauthimages.net",
|
||||||
|
"*.phonefactor.net",
|
||||||
|
"*.enterpriseregistration.windows.net",
|
||||||
|
"*.policykeyservice.dc.ad.msft.net",
|
||||||
|
"*.sharepointonline.com",
|
||||||
|
"*.staffhub.ms",
|
||||||
|
"*.staffhubweb.azureedge.net",
|
||||||
|
"*.sway.com",
|
||||||
|
"*.www.sway.com",
|
||||||
|
"*.eus-www.sway-cdn.com",
|
||||||
|
"*.eus-www.sway-extensions.com",
|
||||||
|
"*.wus-www.sway-cdn.com",
|
||||||
|
"*.wus-www.sway-extensions.com",
|
||||||
|
"*.microsoftusercontent.com",
|
||||||
|
"*.azure-apim.net",
|
||||||
|
"*.flow.microsoft.com",
|
||||||
|
"*.powerapps.com",
|
||||||
|
"*.powerautomate.com",
|
||||||
|
"*.activity.windows.com",
|
||||||
|
"*.cortana.ai",
|
||||||
|
"*.admin.microsoft.com",
|
||||||
|
"*.cdn.odc.officeapps.live.com",
|
||||||
|
"*.cdn.uci.officeapps.live.com",
|
||||||
|
"*.cloud.microsoft",
|
||||||
|
"*.static.microsoft",
|
||||||
|
"*.usercontent.microsoft",
|
||||||
|
"*.compliance.microsoft.com",
|
||||||
|
"*.protection.office.com",
|
||||||
|
"*.security.microsoft.com",
|
||||||
|
"*.defender.microsoft.com",
|
||||||
|
"*.blob.core.windows.net",
|
||||||
|
"*.firstpartyapps.oaspapps.com",
|
||||||
|
"*.prod.firstpartyapps.oaspapps.com.akadns.net",
|
||||||
|
"*.telemetryservice.firstpartyapps.oaspapps.com",
|
||||||
|
"*.wus-firstpartyapps.oaspapps.com"
|
||||||
|
],
|
||||||
|
"source": "https://learn.microsoft.com/en-us/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide"
|
||||||
|
}
|
||||||
71
app/main.js
71
app/main.js
@@ -1,15 +1,15 @@
|
|||||||
import { app, Menu, BrowserWindow, dialog, nativeImage, screen } from "electron";
|
import { app, Menu, BrowserWindow, dialog, nativeImage, shell } from "electron";
|
||||||
import { clearActivity, setActivity, loginToRPC } from "./config/rpc.js";
|
import { clearActivity, setActivity, loginToRPC } from "./config/rpc.js";
|
||||||
import { initialize, trackEvent } from "@aptabase/electron/main";
|
import { initialize, trackEvent } from "@aptabase/electron/main";
|
||||||
import { ElectronBlocker } from "@cliqz/adblocker-electron";
|
import { ElectronBlocker } from "@cliqz/adblocker-electron";
|
||||||
import { setValue, getValue } from "./config/store.js";
|
import { setValue, getValue } from "./config/store.js";
|
||||||
|
import { dirname, join } from "path";
|
||||||
import { fileURLToPath } from "url";
|
import { fileURLToPath } from "url";
|
||||||
import { dirname } from "path";
|
|
||||||
import { join } from "path";
|
|
||||||
|
|
||||||
import { getScreenWidth, getScreenHeight } from "./config/dimensions.js";
|
import { getScreenWidth, getScreenHeight } from "./config/dimensions.js";
|
||||||
import Windows from "./useragents.json" with { type: "json" };
|
import Windows from "./useragents.json" with { type: "json" };
|
||||||
import checkInternetConnected from "check-internet-connected";
|
import checkInternetConnected from "check-internet-connected";
|
||||||
|
import domains from "./domains.json" with { type: "json" };
|
||||||
import contextMenu from "electron-context-menu";
|
import contextMenu from "electron-context-menu";
|
||||||
import updaterpkg from "electron-updater";
|
import updaterpkg from "electron-updater";
|
||||||
import ElectronDl from "electron-dl";
|
import ElectronDl from "electron-dl";
|
||||||
@@ -141,27 +141,64 @@ app.on("ready", () => {
|
|||||||
|
|
||||||
app.on("web-contents-created", (event, contents) => {
|
app.on("web-contents-created", (event, contents) => {
|
||||||
contents.setWindowOpenHandler(({ url }) => {
|
contents.setWindowOpenHandler(({ url }) => {
|
||||||
if (getValue("websites-in-new-window") === "false") {
|
const urlObject = new URL(url);
|
||||||
if (url.includes("page=Download")) {
|
const domain = urlObject.hostname;
|
||||||
return { action: "allow" };
|
const protocol = urlObject.protocol;
|
||||||
|
|
||||||
|
if (getValue("externalLinks") === "true") {
|
||||||
|
if (protocol === "http:" || protocol === "https:") {
|
||||||
|
const isAllowedDomain = domains.domains.some((allowedDomain) =>
|
||||||
|
new RegExp(`^${allowedDomain.replace("*.", ".*")}$`).test(domain)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isAllowedDomain) {
|
||||||
|
if (getValue("websites-in-new-window") === "false") {
|
||||||
|
if (url.includes("page=Download")) return { action: "allow" };
|
||||||
|
BrowserWindow.getFocusedWindow().loadURL(url).catch();
|
||||||
|
if (getValue("discordrpcstatus") === "true") {
|
||||||
|
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||||
|
}
|
||||||
|
return { action: "deny" };
|
||||||
|
} else {
|
||||||
|
if (getValue("discordrpcstatus") === "true") {
|
||||||
|
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
action: "allow",
|
||||||
|
overrideBrowserWindowOptions: {
|
||||||
|
width: Math.round(getScreenWidth() * (windowWidth - 0.07)),
|
||||||
|
height: Math.round(getScreenHeight() * (windowHeight - 0.07)),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
shell.openExternal(url);
|
||||||
|
return { action: "deny" };
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
shell.openExternal(url);
|
||||||
|
return { action: "deny" };
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (getValue("websites-in-new-window") === "false") {
|
||||||
|
if (url.includes("page=Download")) return { action: "allow" };
|
||||||
BrowserWindow.getFocusedWindow().loadURL(url).catch();
|
BrowserWindow.getFocusedWindow().loadURL(url).catch();
|
||||||
if (getValue("discordrpcstatus") === "true") {
|
if (getValue("discordrpcstatus") === "true") {
|
||||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||||
}
|
}
|
||||||
return { action: "deny" };
|
return { action: "deny" };
|
||||||
|
} else {
|
||||||
|
if (getValue("discordrpcstatus") === "true") {
|
||||||
|
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
action: "allow",
|
||||||
|
overrideBrowserWindowOptions: {
|
||||||
|
width: Math.round(getScreenWidth() * (windowWidth - 0.07)),
|
||||||
|
height: Math.round(getScreenHeight() * (windowHeight - 0.07)),
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (getValue("discordrpcstatus") === "true") {
|
|
||||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
action: "allow",
|
|
||||||
overrideBrowserWindowOptions: {
|
|
||||||
width: Math.round(getScreenWidth() * (windowWidth - 0.07)),
|
|
||||||
height: Math.round(getScreenHeight() * (windowHeight - 0.07)),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
contents.on("did-finish-load", () => {
|
contents.on("did-finish-load", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user