Force Editable Mode on Any Google Doc (Aggressive)

Force any Google Docs page into editable mode, regardless of permissions

  1. // ==UserScript==
  2. // @name Force Editable Mode on Any Google Doc (Aggressive)
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.5
  5. // @description Force any Google Docs page into editable mode, regardless of permissions
  6. // @author You
  7. // @match https://docs.google.com/document/d/1Lv5lWrvXyUq_o26xyn-pNwGcVKhs8aQYbxdzKbBnk_A/edit?tab=t.0
  8. // @grant none
  9. // @run-at document-end
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Function to enable contentEditable on Google Docs document
  17. function forceEditableMode() {
  18. // Check for the editor container and enable editing if available
  19. const editableDiv = document.querySelector('.kix-appview-editor');
  20. if (editableDiv) {
  21. editableDiv.contentEditable = true;
  22. editableDiv.style.pointerEvents = 'auto';
  23.  
  24. // Force other elements to be editable
  25. const editableContent = document.querySelector('.kix-document');
  26. if (editableContent) {
  27. editableContent.setAttribute('contenteditable', 'true');
  28. }
  29.  
  30. console.log('Google Docs is now editable!');
  31. }
  32. }
  33.  
  34. // Aggressively remove any overlays or viewer blocks
  35. function removeViewerOverlay() {
  36. const viewerOverlay = document.querySelector('.kix-viewer-overlay');
  37. if (viewerOverlay) {
  38. viewerOverlay.remove();
  39. console.log('Removed viewer overlay.');
  40. }
  41.  
  42. const disallowedMessage = document.querySelector('.docs-viewer-disallowed-message');
  43. if (disallowedMessage) {
  44. disallowedMessage.style.display = 'none';
  45. console.log('Removed disallowed message.');
  46. }
  47. }
  48.  
  49. // Mutation Observer to monitor page changes
  50. const observer = new MutationObserver(function() {
  51. // Force the document to become editable every time something changes
  52. forceEditableMode();
  53. removeViewerOverlay();
  54. });
  55.  
  56. // Start observing document body for changes
  57. observer.observe(document.body, {
  58. childList: true,
  59. subtree: true,
  60. });
  61.  
  62. // Initial attempt to force editable mode
  63. forceEditableMode();
  64. removeViewerOverlay();
  65. })();