No results found

ChromeXt

Add UserScript and DevTools supports to Chrome using Xposed framework

How does it work?

We hook the onUpdateUrl function in UserScript.kt, add URL comparison there and evaluate JavaScript using the javascript: scheme.

Chromium based browsers, Bromite, Thorium, Mulch, and Brave are also fully supported. Due to different design ideas, supports for the following browsers are not perfect:

  1. Egde, DevTools front end is removed by its authors;
  2. Vivaldi, Developer options menu is removed by its authors.

Usage

Currently, this project requires Xposed framework installed, such as LSPosed for root users. For non-root users, unfortunately LSPatch is technically not supported yet due to isolated process issue; we are working on it.

Pick up the latest built APK from my repo's GitHub Action and install it. The author uploads releases to Xposed-Modules-Repo when needed, but not that frequently.

You can then install UserScripts from popular sources: URLs that ends with .user.js. However, this fails for scripts from some domains like raw.githubusercontent.com. For them, one can download those scripts using the download button on the top of Chrome's three dot menu, and then open your downloaded scripts in Chrome. The installation prompt should show up again. Alternatively, it is possible to use the Install UserScript page menu if you simply want to install it without further editing.

Supported API

Currently, ChromeXt supports almost all Tampermonkey APIs:

  1. @name (colons and backslashes not allowed), @namespace (backslashes not allowed), @description and so on
  2. @match (must present and conform to the Chrome Standard)
  3. @include = @match, @exclude
  4. @run-at: document-start, document-end, document-idle (the default and fallback value)
  5. @grant GM_addStyle, GM_addElement, GM_xmlhttpRequest, GM_openInTab, GM_registerMenuCommand (Resources panel of eruda), GM_unregisterMenuCommand, GM_download, unsafeWindow (= window)
  6. @require, @resource (Without Subresource Integrity)

These APIs are implemented differently from the official ones, see the source file LocalScripts.kt if you have doubts or questions.

UserScripts manager front end

To manage scripts installed by ChromeXt, here are a simple front end hosted on github.io and two mirrors of it (in case that you have connection issues): onrender.com, netlify.app.

Edit scripts before installing them

If you cancel the prompt of installing a new UserScript, then you can edit it directly in Chrome. Use the Install UserScript page menu to install your modified UserScript.

Limitations

A valid UserScript fails if the following two conditions hold at the same time:

  1. The matched website has disabled script-src 'unsafe-eval'; by Content Security Policy;
  2. The script size is nearly 2M.

To deal with this extremely rare case, one should

use multiple scripts of normal sizes instead of a giant script

Dev Tools for developers

From three dots page menu, ChromeXt offers you

  1. Developer tools in the UserScript manager front end,
  2. Eruda console in other pages.

For Edge browser, these menus are moved to the page info menu, which locates at the left corner inside the URL input bar.

Bonus

Solution of system gesture conflicts

The history forward gesture of Chrome is now available near the vertical center of screen. On other areas, only the system gesture is available. One can disable it through the Developer options menu. (Tap seven times on the Chrome version from the Chrome settings, you will see the Developer options menu.)

Enable Reader Mode manually

ChromeXt adds a book icon in the page menu to enable reader mode manually.

AD Blocker solution

For blocking network requests, I recommend to use AdAway or any proxy AD Blocker such as clash.

A content cosmetic blocker is embedded into ChromeXt with the help of eruda. Open the Eruda console from the page menu. In the Elements panel, one can use the pointer icon to select elements on the page. After clicking the delete icon for a selected element, a corresponding filter will be saved to the Resources panel, where one can manage previous added filters. These filters are saved in the browser even after clearing the site's data.

Another way to block ADs is using the Content-Security-Policy to block some scripts from loading. See the official Content-Security-Policy Blocker UserScript.

User-Agent spoofing

One can edit the User-Agent from the Info panel of Eruda console. A valid User-Agent should contain only ASCII characters. Currently, ChromeXt only changes the User-Agent HTTP header, which works well but is deprecated.

When the User-Agent spoofing is not working, refresh the page using the reload button in the page menu. (By contrast, a swipe refresh might be insufficient.)

Note that the DevTools can also change User-Agent.

Contribute to this project

Before you submit your pull-requests, please ensure that the command ./gradlew build or gradlew.bat build produces no warnings and no errors.

Here are corresponding files you might want / need to change:

  1. Front end: manager.vue
  2. Tampermonkey API: LocalScripts.kt
  3. Eruda configuration: local_eruda.js

Development plans

  • [x] Make it possible to pass intents to Chrome with file scheme
  • [x] Fix encoding problem for Chrome downloaded JavaScript files
  • [x] Inject module resource into Chrome
  • [x] Implement developer tools
  • [x] Use local versions of eruda
  • [x] Improve eruda incorporation with Chrome
  • [x] Add more information in the preference screen
  • [x] Support more Tampermonkey APIs
  • [x] Find elegant way to support Dev Tools for Android 11-
  • [x] Improve front end
  • [x] Add cosmetic AdBlocker using eruda
  • [x] Find way to get current interactive tab
  • [x] Remove AndroidX Room dependency to reduce app size
  • [x] Support non-split version of Android Chrome
  • [x] Solve the menu hook problem for non-split versions
  • [x] Handle multiple Tab Model
  • [x] Forward Dev Tools server socket
  • [x] A mobile friendly Dev Tools front end
  • [x] Allow user to trigger reader mode
  • [x] Support @resource API
  • [x] Make GestureNav Fix optional
  • [x] Add an open source License
  • [ ] Support mocking User-Agent
  • [ ] Support urlFilter syntax
  • [x] Improve Open in Chrome function
  • [x] Implement fully GM_info
  • [x] Eruda fails due to Injection Sinks
  • [x] Hide page_info panel automatically
  • [ ] Fix Edge browser DevTools inspect url
  • [ ] Get correct Chromium version
  • [x] Fix page menu injection position
  • [ ] Use Chrome DevTools Protocol as UserScript engine
  • [ ] Use adb forward to support non-root users
  • [ ] Turn Xposed into optional dependency
  • [ ] Support LSPatch for isolated process
  • [ ] Add recommended scripts to the front end manager

Package

org.matrix.chromext

Authors

JingMatrix

Releases

ChromeXt v3.1

Release Type: Stable

5/18/2023, 1:16:00 PM

View all releases

Releases

ChromeXt v3.1

Release Type: Stable

5/18/2023, 1:16:00 PM

  1. Size within 85 kB
  2. Support Android 5.0 +
  3. Fully support Edge
  4. Fix small bugs and crashes
  5. Fully support User-Agent spoofing
  6. New designed icons

Show older versions

© 2021 - 2023 New Xposed Module Repository