├── OpenYouTubeSafariExtension.appex ├── popup.js ├── Info.plist ├── images │ ├── icon-128.png │ ├── icon-256.png │ ├── icon-48.png │ ├── icon-512.png │ ├── icon-64.png │ ├── icon-96.png │ ├── toolbar-icon-16.png │ ├── toolbar-icon-19.png │ ├── toolbar-icon-32.png │ ├── toolbar-icon-38.png │ ├── toolbar-icon-48.png │ └── toolbar-icon-72.png ├── OpenYouTubeSafariExtension ├── background.js ├── popup.html ├── popup.css ├── _locales │ └── en │ │ └── messages.json ├── manifest.json └── content.js └── README.md /OpenYouTubeSafariExtension.appex/popup.js: -------------------------------------------------------------------------------- 1 | console.log("Hello World!", browser); 2 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/Info.plist -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-128.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-256.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-48.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-512.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-64.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/icon-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/icon-96.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/OpenYouTubeSafariExtension: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/OpenYouTubeSafariExtension -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-16.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-19.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-32.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-38.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-48.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/images/toolbar-icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillyCurtis/OpenYouTubeSafariExtension/HEAD/OpenYouTubeSafariExtension.appex/images/toolbar-icon-72.png -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/background.js: -------------------------------------------------------------------------------- 1 | browser.runtime.onMessage.addListener((request, sender, sendResponse) => { 2 | console.log("Received request: ", request); 3 | 4 | if (request.greeting === "hello") 5 | sendResponse({ farewell: "goodbye" }); 6 | }); 7 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Hello World! 10 | 11 | 12 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/popup.css: -------------------------------------------------------------------------------- 1 | :root { 2 | color-scheme: light dark; 3 | } 4 | 5 | body { 6 | width: 100px; 7 | padding: 10px; 8 | 9 | font-family: system-ui; 10 | text-align: center; 11 | } 12 | 13 | @media (prefers-color-scheme: dark) { 14 | /* Dark Mode styles go here. */ 15 | } 16 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/_locales/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extension_name": { 3 | "message": "Open in YouTube", 4 | "description": "The display name for the extension." 5 | }, 6 | "extension_description": { 7 | "message": "Displays an Open in YouTube alert for sideloaded YouTube", 8 | "description": "Description of what the extension does." 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # How to install 2 | - Download OpenYouTubeSafariExtension.appex 3 | - Unzip your YouTube.ipa & copy the .appex file you downloaded to /Payload/YouTube.app/Plugins 4 | - Compress the Payload folder and then rename the zip folder from Payload.zip to YouTube.ipa 5 | - Sideload using [Sideloadly](https://sideloadly.io/) or your preferred signing service 6 | - Go to Settings > Safari > Extensions > Open in YouTube and toggle it **On** then change it from **Ask** to **Allow** 7 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "default_locale": "en", 4 | 5 | "name": "__MSG_extension_name__", 6 | "description": "__MSG_extension_description__", 7 | "version": "1.0", 8 | 9 | "icons": { 10 | "48": "images/icon-48.png", 11 | "96": "images/icon-96.png", 12 | "128": "images/icon-128.png", 13 | "256": "images/icon-256.png", 14 | "512": "images/icon-512.png" 15 | }, 16 | 17 | "background": { 18 | "service_worker": "background.js" 19 | }, 20 | 21 | "content_scripts": [{ 22 | "js": [ "content.js" ], 23 | "matches": [ "*://*.youtube.com/*" ] 24 | }], 25 | 26 | "action": { 27 | "default_popup": "popup.html", 28 | "default_icon": { 29 | "16": "images/toolbar-icon-16.png", 30 | "19": "images/toolbar-icon-19.png", 31 | "32": "images/toolbar-icon-32.png", 32 | "38": "images/toolbar-icon-38.png", 33 | "48": "images/toolbar-icon-48.png", 34 | "72": "images/toolbar-icon-72.png" 35 | } 36 | }, 37 | 38 | "permissions": [ ] 39 | } 40 | -------------------------------------------------------------------------------- /OpenYouTubeSafariExtension.appex/content.js: -------------------------------------------------------------------------------- 1 | browser.runtime.sendMessage({ greeting: "hello" }).then((response) => { 2 | console.log("Received response: ", response); 3 | }); 4 | 5 | browser.runtime.onMessage.addListener((request, sender, sendResponse) => { 6 | console.log("Received request: ", request); 7 | }); 8 | 9 | function afterNavigate() { 10 | var locationArr = window.location.pathname.split("/").reverse() 11 | if (locationArr.includes("watch")) { 12 | window.location.href = `youtube://watch${window.location.search}` 13 | } else if (locationArr.includes("live")) { 14 | window.location.href = `youtube://live/${locationArr[0]}` 15 | } else if (locationArr.includes("shorts")) { 16 | window.location.href = `youtube://shorts/${locationArr[0]}` 17 | } else if (locationArr.includes("clip")) { 18 | window.location.href = `youtube://clip/${locationArr[0]}` 19 | } else if (locationArr.includes("channel")) { 20 | window.location.href = `youtube://channel/${locationArr[0]}` 21 | } else if (locationArr[0] && !locationArr[1]) { 22 | window.location.href = `youtube://${locationArr[0]}` 23 | } 24 | } 25 | 26 | (document.body || document.documentElement).addEventListener('transitionend', 27 | function(/*TransitionEvent*/ event) { 28 | if (event.propertyName === 'width' && event.target.id === 'progress') { 29 | afterNavigate(); 30 | } 31 | }, true); 32 | // After page load 33 | afterNavigate(); 34 | --------------------------------------------------------------------------------