修复首次打开浏览器加载脚本的问题
This commit is contained in:
parent
8a216933ca
commit
1aaf1bbd4a
@ -164,6 +164,10 @@ export class RuntimeService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getMessageFlag() {
|
||||||
|
return Cache.getInstance().get("scriptInjectMessageFlag");
|
||||||
|
}
|
||||||
|
|
||||||
// 给指定tab发送消息
|
// 给指定tab发送消息
|
||||||
sendMessageToTab(to: ExtMessageSender, action: string, data: any) {
|
sendMessageToTab(to: ExtMessageSender, action: string, data: any) {
|
||||||
if (to.tabId === -1) {
|
if (to.tabId === -1) {
|
||||||
@ -286,40 +290,57 @@ export class RuntimeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 注册inject.js
|
// 注册inject.js
|
||||||
registerInjectScript() {
|
async registerInjectScript() {
|
||||||
chrome.userScripts.getScripts({ ids: ["scriptcat-inject"] }).then((res) => {
|
// 如果没设置过, 则更新messageFlag
|
||||||
if (res.length == 0) {
|
let messageFlag = await this.getMessageFlag();
|
||||||
chrome.userScripts.configureWorld({
|
if (!messageFlag) {
|
||||||
csp: "script-src 'self' 'unsafe-inline' 'unsafe-eval' *",
|
messageFlag = await this.messageFlag();
|
||||||
messaging: true,
|
const injectJs = await fetch("inject.js").then((res) => res.text());
|
||||||
|
// 替换ScriptFlag
|
||||||
|
const code = `(function (MessageFlag) {\n${injectJs}\n})('${messageFlag}')`;
|
||||||
|
chrome.userScripts.configureWorld({
|
||||||
|
csp: "script-src 'self' 'unsafe-inline' 'unsafe-eval' *",
|
||||||
|
messaging: true,
|
||||||
|
});
|
||||||
|
const scripts: chrome.userScripts.RegisteredUserScript[] = [
|
||||||
|
{
|
||||||
|
id: "scriptcat-inject",
|
||||||
|
js: [{ code }],
|
||||||
|
matches: ["<all_urls>"],
|
||||||
|
allFrames: true,
|
||||||
|
world: "MAIN",
|
||||||
|
runAt: "document_start",
|
||||||
|
},
|
||||||
|
// 注册content
|
||||||
|
{
|
||||||
|
id: "scriptcat-content",
|
||||||
|
js: [{ file: "src/content.js" }],
|
||||||
|
matches: ["<all_urls>"],
|
||||||
|
allFrames: true,
|
||||||
|
runAt: "document_start",
|
||||||
|
world: "USER_SCRIPT",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
try {
|
||||||
|
// 如果使用getScripts来判断, 会出现找不到的问题
|
||||||
|
// 另外如果使用
|
||||||
|
await chrome.userScripts.register(scripts);
|
||||||
|
} catch (e: any) {
|
||||||
|
LoggerCore.logger().error("register inject.js error", {
|
||||||
|
error: e,
|
||||||
});
|
});
|
||||||
fetch("inject.js")
|
if (e.message?.indexOf("Duplicate script ID") !== -1) {
|
||||||
.then((res) => res.text())
|
// 如果是重复注册, 则更新
|
||||||
.then(async (injectJs) => {
|
chrome.userScripts.update(scripts, () => {
|
||||||
// 替换ScriptFlag
|
if (chrome.runtime.lastError) {
|
||||||
const code = `(function (MessageFlag) {\n${injectJs}\n})('${await this.messageFlag()}')`;
|
LoggerCore.logger().error("update inject.js error", {
|
||||||
chrome.userScripts.register([
|
error: chrome.runtime.lastError,
|
||||||
{
|
});
|
||||||
id: "scriptcat-inject",
|
}
|
||||||
js: [{ code }],
|
|
||||||
matches: ["<all_urls>"],
|
|
||||||
allFrames: true,
|
|
||||||
world: "MAIN",
|
|
||||||
runAt: "document_start",
|
|
||||||
},
|
|
||||||
// 注册content
|
|
||||||
{
|
|
||||||
id: "scriptcat-content",
|
|
||||||
js: [{ file: "src/content.js" }],
|
|
||||||
matches: ["<all_urls>"],
|
|
||||||
allFrames: true,
|
|
||||||
runAt: "document_start",
|
|
||||||
world: "USER_SCRIPT",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadingScript: Promise<void> | null | undefined;
|
loadingScript: Promise<void> | null | undefined;
|
||||||
@ -473,18 +494,27 @@ export class RuntimeService {
|
|||||||
if (scriptRes.metadata["run-at"]) {
|
if (scriptRes.metadata["run-at"]) {
|
||||||
registerScript.runAt = getRunAt(scriptRes.metadata["run-at"]);
|
registerScript.runAt = getRunAt(scriptRes.metadata["run-at"]);
|
||||||
}
|
}
|
||||||
if (await Cache.getInstance().get("registryScript:" + script.uuid)) {
|
const res = await chrome.userScripts.getScripts({ ids: [script.uuid] });
|
||||||
await chrome.userScripts.update([registerScript]);
|
const logger = LoggerCore.logger({
|
||||||
|
name: script.name,
|
||||||
|
registerMatch: {
|
||||||
|
matches: registerScript.matches,
|
||||||
|
excludeMatches: registerScript.excludeMatches,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (res.length > 0) {
|
||||||
|
await chrome.userScripts.update([registerScript], () => {
|
||||||
|
if (chrome.runtime.lastError) {
|
||||||
|
logger.error("update registerScript error", {
|
||||||
|
error: chrome.runtime.lastError,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
await chrome.userScripts.register([registerScript], () => {
|
await chrome.userScripts.register([registerScript], () => {
|
||||||
if (chrome.runtime.lastError) {
|
if (chrome.runtime.lastError) {
|
||||||
LoggerCore.logger().error("registerScript error", {
|
logger.error("registerScript error", {
|
||||||
error: chrome.runtime.lastError,
|
error: chrome.runtime.lastError,
|
||||||
name: script.name,
|
|
||||||
registerMatch: {
|
|
||||||
matches: registerScript.matches,
|
|
||||||
excludeMatches: registerScript.excludeMatches,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user