office_online_viewer

View office documents in your browser with Microsoft Office Online

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name		office_online_viewer
// @description		View office documents in your browser with Microsoft Office Online
// @namespace		liudonghua123
// @version        	0.0.1
// @include        	*
// @exclude        	http*://view.officeapps.live.com/*
// @exclude        	http*://docs.google.com/*
// @exclude        	http*://mail.google.com/*
// @exclude        	http*://viewer.zoho.com/*
// @exclude        	http*://office.live.com/*
// ==/UserScript==

(function process() {
    const pageLinks = [...document.links];
    const officeWordExtension = ["doc", "docx"],
        officeExcelExtension = ["xls", "xlsx"],
        officePowerpointExtension = ["ppt", "pps", "pptx"];
    const officeExtension = [...officeWordExtension, ...officeExcelExtension, ...officePowerpointExtension];
    const viewOfficeUrl = "https://view.officeapps.live.com/op/view.aspx";
    const isOfficeLink = (link) => {
        const { pathname: path, text } = link;
        const pathExtension = path.lastIndexOf('.') > 0 ? path.substr(path.lastIndexOf('.') + 1).toLowerCase() : '';
        const textExtension = text.lastIndexOf('.') > 0 ? text.substr(text.lastIndexOf('.') + 1).toLowerCase() : '';
        return officeExtension.includes(pathExtension) || officeExtension.includes(textExtension);
    };
    const linkIcon = (link) => {
        const { pathname: path, text } = link;
        const pathExtension = path.lastIndexOf('.') > 0 ? path.substr(path.lastIndexOf('.') + 1).toLowerCase() : '';
        const textExtension = text.lastIndexOf('.') > 0 ? text.substr(text.lastIndexOf('.') + 1).toLowerCase() : '';
        if (officeWordExtension.includes(pathExtension) || officeWordExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-word.svg";
        else if (officeExcelExtension.includes(pathExtension) || officeExcelExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-excel.svg";
        else if (officePowerpointExtension.includes(pathExtension) || officePowerpointExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-powerpoint.svg";
        else return '';
    };
    const addOfficeBadge = (link) => {
        const officeLink = document.createElement('a');
        officeLink.href = `${viewOfficeUrl}?src=${encodeURIComponent(link.href)}`;
        officeLink.isParsed = true;
        officeLink.target = "_blank";
        const ico = document.createElement("img");
        ico.src = linkIcon(link);
        ico.style.marginLeft = "5px";
        ico.style.height = "25px";
        officeLink.appendChild(ico);
        link.parentNode.insertBefore(officeLink, link.nextSibling);
    }
    const officeLinks = pageLinks.filter(isOfficeLink);
    for (const link of officeLinks) {
        console.info(`process ${link.href}`);
        addOfficeBadge(link);
    }
})();