gpt4 book ai didi

chromium - 有没有办法做一个相对文件://@require in Tampermonkey on Chromium?

转载 作者:行者123 更新时间:2023-12-02 03:11:10 26 4
gpt4 key购买 nike

有没有办法告诉Tampermonkey脚本在 Chromium 中运行使用亲属 @require文件路径?例如,如果我有以下脚本标题:

// ==UserScript==
// @name test
// @namespace http://tampermonkey.net/
// @version 0.1
// @description test script
// @author me
// @match *://*/*
// @require file://relative/path/to/external.js
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==

我可以使用 @requirefile://并使其相对于我用户的 Chromium 配置文件或 Tampermonkey 扩展目录?如果这是不可能的,有没有办法在 Chromium 启动时将参数传递给 Tampermonkey 脚本,或者在脚本中以不同的方式包含外部 .js 文件?

澄清一下,我正在尝试创建一个 Kiosk 系统,用户需要能够指定显示哪些仪表板,其中一些仪表板需要登录。我想让他们在外部 .js 文件中指定所需的信息。这是代码和示异常(exception)部文件。

示例 logins.js
var config =
{
"sites": [
{
"description": "All X dashboards",
"site": "https://dashboards.X.com/index.php?return=",
"username": "username",
"password": "password",
"form": "form-login",
"username_field": "login",
"password_field": "password",
"submit_button": "button-login",
"redirect": ""
}
};

使用外部文件的 Tampermonkey 脚本
// ==UserScript==
// @name test
// @namespace http://tampermonkey.net/
// @version 0.1
// @description test script
// @author me
// @match *://*/*
// @require file://relative/path/to/logins.js
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==

var delay = 500;
var attempts = 0;
var maxAttempts = 40;

(function() {
'use strict';

var url = GM_getValue("redirect");
if (url !== undefined && url !== null)
{
GM_setValue("redirect", null);
document.location.href = url;
return;
}

var site = null;
for (var i = 0, len = config.sites.length; i < len; i++)
{
if (document.location.href.includes(config.sites[i].site))
{
site = config.sites[i];
break;
}
}

if (site === null)
return;

setTimeout(doLogin.bind(null, site), delay);

})();

function doLogin(site)
{
var form = document.forms[site.form];
if (!form)
form = document.forms[0];

var username = form[site.username_field];
var password = form[site.password_field];

if (!form || !username || !password)
{
attempts++;
if (attempts > maxAttempts)
return;

setTimeout(doLogin.bind(null, site), delay);
}

username.value = site.username;
password.value = site.password;

var login = form[site.submit_button];

if (site.redirect && site.redirect.length > 0)
GM_setValue("redirect", site.redirect);

if (login)
login.click();
else
form.submit();
}

由于信息亭和 Chromium 的性质,我希望这条路径是相对的而不是绝对的,因为绝对意味着我必须对路径进行硬编码,而硬编码任何东西都是不好的。

最佳答案

用脚本和 Process Monitor 做一些测试,我不相信有办法做一个实际的相对路径,但如果我指定 file:///filename.js或者甚至尝试通过使用类似 file:///../filename.js 的东西来建立相对关系, Chromium将尝试从包含 chrome.exe 的目录中读取文件.

就我而言,这是通往 chrome.exe 的路径。文件由我知道并由我控制,我可以将我的“相对”路径脚本放在该目录中并将它们引用为 file:///filename.js
再次说明,以防万一其他人发现这很有用。如果我有我的 chrome.exe文件在 c:\kiosk\chrome\chrome.exe 我使用 @require file:///filename.js 然后 chrome 将尝试加载:

c:\kiosk\chrome\filename.js

这也适用于 chrome 目录内的任何相对路径,即 file:///scripts/filename.js 将解析为 c:\kiosk\chrome\scripts\filename.js

关于chromium - 有没有办法做一个相对文件://@require in Tampermonkey on Chromium?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com