拇指客

拇指客

专注于发现和分享互联网的新鲜事物!! 本站建立在Crossbell 区块链上,是面向所有人的最棒-链上-开源-博客社区
twitter

What to do if Feishu documents cannot be copied

image

  1. Install Edge Browser

Win10 and Win11 come with Edge browser by default, other systems can download it from the address below.

https://www.microsoft.com/zh-cn/edge/download?form=MA13FJ

  1. Install Tampermonkey Extension

Also known as Tampermonkey, the Edge app store address is as follows:

https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd

image

  1. Install the "Make Your Feishu More Useful" Script

  2. Online Installation

Visit the website below and click "Install Now".
https://env-00jxt5o5005s-static.normal.cloudstatic.cn/index.html#/pages/list/detail?id=473205&host=greasyfork

image
You will be redirected to the script installation interface, click "Install".

image
2. Local Installation

Click on the Tampermonkey extension, then click "Add New Script".

image:::div{style="max=width: 150px"}

:::
Copy the code below into the opened window.


// ==UserScript==
// @name         Make Your Feishu More Useful (Optimized Version)
// @license      GPL License
// @namespace    https://bytedance.com
// @version      0.5
// @description  Allows copying of any content in Feishu documents without permission restrictions, and enables right-click menu (copy/download images)
// @author       NOABC
// @match        *://*.feishu.cn/*
// @match        *://*.larkoffice.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=feishu.cn
// @grant        none
// @run-at       document-start
// @downloadURL https://update.greasyfork.org/scripts/473205/%E8%AE%A9%E4%BD%A0%E7%9A%84%E9%A3%9E%E4%B9%A6%E6%9B%B4%E5%A5%BD%E7%94%A8%28%E4%BC%98%E5%8C%96%E7%89%88%29.user.js
// @updateURL https://update.greasyfork.org/scripts/473205/%E8%AE%A9%E4%BD%A0%E7%9A%84%E9%A3%9E%E4%B9%A6%E6%9B%B4%E5%A5%BD%E7%94%A8%28%E4%BC%98%E5%8C%96%E7%89%88%29.meta.js
// ==/UserScript==
(function () {
    // Override addEventListener to handle copy and contextmenu events
    const overrideEventListeners = () => {
        const rawAddEventListener = EventTarget.prototype.addEventListener;
        EventTarget.prototype.addEventListener = function (type, listener, options) {
            if (type === 'copy') {
                rawAddEventListener.call(this, type, event => {
                    event.stopImmediatePropagation();
                    return null;
                }, options);
                return;
            }
            if (type === 'contextmenu') {
                rawAddEventListener.call(this, type, event => {
                    event.stopImmediatePropagation();
                    return listener(event);
                }, options);
                return;
            }
            rawAddEventListener.call(this, type, listener, options);
        };
    };
    // Override XMLHttpRequest to manipulate permission responses
    const overrideXHR = () => {
        const rawOpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function (method, url, ...rest) {
            this.addEventListener('readystatechange', function () {
                if (this.readyState === 4 && url.includes('space/api/suite/permission/document/actions/state/')) {
                    let response = this.responseText;
                    try {
                        response = JSON.parse(response);
                        if (response.data && response.data.actions && response.data.actions.copy !== 1) {
                            response.data.actions.copy = 1;
                            Object.defineProperty(this, 'responseText', { value: JSON.stringify(response) });
                            Object.defineProperty(this, 'response', { value: response });
                        }
                    } catch (e) {
                        console.error('Failed to modify response:', e);
                    }
                }
            }, false);
            rawOpen.call(this, method, url, ...rest);
        };
    };
    // Run overrides immediately and on DOMContentLoaded
    overrideEventListeners();
    overrideXHR();
    document.addEventListener('DOMContentLoaded', () => {
        overrideEventListeners();
        overrideXHR();
    });
})();
  1. Enable Developer Mode in the Browser
    To allow Tampermonkey to run properly, you need to enable developer mode. Click the extension button - Manage Extensions.

image
Enable "Developer Mode", then turn the Tampermonkey extension off and on again.

image

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.