我正在try 让持久性存储与WASM SQLite一起工作.
我在background.js文件中的代码是这样的
const worker = new Worker('./worker.js');
worker.postMessage({ loadSQLite: true });
但它从来没有通过工人的部分. 我得到以下错误.
Uncaught ReferenceError: Worker is not defined
所以在做了一些研究之后,我try 了一些可能的解决方案.有些人说你不能在工人中繁殖工人,有一个子工人解决方案,但对我不起作用(如果对你有效,请告诉我,但我无法让它起作用).
我认为worker.js中的代码并不重要,但我会在那里发布我想要做的事情.
worker.js个
import sqlite3InitModule from './lib/@sqlite.org/sqlite-wasm/index.mjs';
const log = (...args) => console.log(...args);
const error = (...args) => console.error(...args);
console.log("worker loaded...");
//@JA - SQLite Database Setup
const start = function (sqlite3) {
console.log(sqlite3);
const capi = sqlite3.capi; // C-style API
const oo = sqlite3.oo1; // High-level OO API
console.log(`SQLite3 Version ${capi.sqlite3_libversion()} - ${capi.sqlite3_sourceid()}`);
let db;
if ('OpfsDb' in oo) {
db = new oo.OpfsDb('/mydb.sqlite3');
console.log('The OPFS is available.');
console.log(`Persisted db = ${db.filename}`);
} else {
db = new oo.DB('/mydb.sqlite3', 'ct');
console.log('The OPFS is not available.');
console.log(`transient db = ${db.filename}`);
}
try{
db.exec(`CREATE TABLE IF NOT EXISTS results (id INTEGER PRIMARY KEY AUTOINCREMENT, search_name TEXT, strategy_name TEXT, json_data TEXT)`);
} finally {
db.close();
}
}
self.addEventListener('message', (event) => {
if (event.data.loadSQLite) {
// Load the SQLite library within the web worker
sqlite3InitModule({
print: log,
printErr: error,
}).then(function (sqlite3) {
log('SQLite Done initializing.');
try {
start(sqlite3);
} catch (e) {
error('Exception:', e.message);
}
});
}
});
如果我把它放在worker.js之外,这个代码就可以工作了,但是它是暂时的,这意味着数据库不会保存!
我的目标是让它使用OPFS进行持久存储,但这被证明是相当困难的,我遇到了障碍.如有任何帮助,我们不胜感激!
我的目标是The OPFS is available.
来自该资源:https://sqlite.org/wasm/doc/trunk/persistence.md
上面写着it must be in a service worker to work美元.我以为那名后台.js是一名服务人员,但显然不是,否则这个应该会在那里起作用.这就是为什么我要在那里创造一个服务工作者.
我的 list 文件在这里:
{
"name" : "__MSG_appName__",
"short_name": "__MSG_appShortName__",
"description": "__MSG_appDescription__",
"version" : "2.0.2",
"version_name": "2.0.2",
"manifest_version": 3,
"default_locale": "en",
"minimum_chrome_version": "88",
"permissions": [
"activeTab",
"tabs",
"storage",
"scripting",
"unlimitedStorage",
"declarativeNetRequest",
"declarativeNetRequestFeedback"
],
"icons": {
"16": "./assets/img/icon-16.png",
"32": "./assets/img/icon-32.png",
"48": "./assets/img/icon-48.png",
"128": "./assets/img/icon-128.png"
},
"background":{
"service_worker": "background.js",
"type": "module"
},
"action":{
"default_popup": "./popup.html",
"default_icons": {
"16": "./assets/img/icon-16.png",
"32": "./assets/img/icon-32.png",
"48": "./assets/img/icon-48.png",
"128": "./assets/img/icon-128.png"
},
"default_title": "__MSG_appName__"
},
"host_permissions": [
"https://*.tradingview.com/*"
],
"content_scripts": [
{
"all_frames": true,
"matches": [
"https://*.tradingview.com/*",
"http://*.tradingtools.software/*"
],
"css": [
"./css/trading-view.css",
"./lib/datetimepicker/jquery.datetimepicker.min.css"
],
"js": [
"./lib/jquery/jquery-3.6.0.min.js",
"./lib/lodash/lodash.js",
"./lib/luxon/non-es6-luxon.js",
"./lib/datetimepicker/jquery.datetimepicker.full.min.js",
"./js/classes/scanner.js",
"./js/classes/dialogs.js",
"./js/classes/queues.js",
"./js/helpers/helpers.js",
"./js/helpers/inputs.js",
"./js/helpers/security.js",
"./js/helpers/manipulators.js",
"./js/helpers/strategy.js",
"./js/helpers/license.js",
"./js/globals/globals.js",
"./js/content/tradingview-content-script.js"
],
"run_at": "document_idle"
},
{
"all_frames": true,
"matches":["https://*.tradingview.com/*","http://*.tradingtools.software/*"],
"js":[ "./js/injectors/before.js" ],
"run_at": "document_start"
},
{
"all_frames": true,
"matches":["https://*.tradingview.com/*","http://*.tradingtools.software/*"],
"js":[ "./js/injectors/after.js" ],
"run_at": "document_end"
}
],
"web_accessible_resources": [{
"resources": ["/js/injectors/before_inject.js","/js/injectors/after_inject.js","/js/injectors/page-script.js","/assets/*","workers.js"],
"matches": ["<all_urls>"]
}],
"content_security_policy": {
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'; worker-src 'self'",
"sandbox": "sandbox allow-scripts; default-src 'self' 'wasm-unsafe-eval'; frame-src 'self'; worker-src 'self'"
}
}