gpt4 book ai didi

javascript - 如何在 chrome 扩展中使用 firebase 数据库

转载 作者:可可西里 更新时间:2023-11-01 01:54:44 27 4
gpt4 key购买 nike

我想将它用作我的内容脚本的一部分,以便我可以从我的 firebase 数据库中获取数据。但是,我不知道如何引用 firebase 文档中提供的脚本:

<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase.js"></script>

我知道如果我在弹出的 html 页面中完成这一切,那么我可以加载脚本标签,但是在内容脚本中,除了内容页面之外没有 html 页面,所以我不确定是否这甚至是可能的。

最佳答案

ContentScript 在页面的 DOM 上运行,但在不同的 JS 沙箱上运行,因此您不能像示例中所示那样直接通过 DOM 注入(inject) JS。

我建议您将 firebase lib 加载到后台页面,然后您可以从您的后台脚本访问它,并通过后台后端从您的内容脚本代理请求。这不会导致每次加载页面加载内容脚本时加载 firebase 库,它会在后台页面初始化时加载一次(或者您可以使用非持久性后台脚本通过请求加载它)。

例子:

list .json

{
"manifest_version": 2,
"name": "FireBase Demo",
"description": "FireBase client demo",
"version": "0.0.1",
"permissions": [
"<all_urls>",
"tabs"
],
"background": {
"page": "bg.html",
"persistent": false
},
"content_scripts": [{
"matches": ["https://*/*","http://*/*"],
"js": ["cs.js"]
}],
"content_security_policy": "script-src 'self' https://www.gstatic.com/firebasejs/5.3.0/firebase.js; object-src 'self'"
}

bg.html

<html>
<head>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase.js"></script>
<script src="bg.js"></script>
</head>
<body></body>
</html>

bg.js

firebase.initializeApp({
apiKey: '...',
authDomain: '...',
projectId: '...'
});

var db = firebase.firestore();
db.settings({timestampsInSnapshots: true});
chrome.runtime.onMessage.addListener((msg, sender, response) => {
if (msg.command == "add"){
console.log("process msg add", msg, sender, response);
db.collection(msg.collection).add(msg.data).then((result) => {
console.log("success", result)
response({type: "result", status: "success", data: result, request: msg});
}).catch((result) => {
console.log("error", result);
response({type: "result", status: "error", data: result, request: msg});
});
}
return true;
});

cs.js

chrome.runtime.sendMessage({command: "add", collection: "users", data: {name: "user"}}, (msg) => {
console.log("response", msg)
});

另一种变体是加载你的 firebase JS 库和你需要运行到页面的 JS 沙箱的代码,方法是将它注入(inject)到页面的 DOM 中,如下所示:

var script = document.createElement("script");
script.src = "https://www.gstatic.com/firebasejs/5.3.0/firebase.js"
document.body.append(script); // firebase lib will be loaded to the page's JS sandbox and page's DOM
var fn = function injectedFunction(seed) { /* your JS code you want to run is page's sandbox */ }
var ele = document.createElement("script");
ele.textContent = fn+"console.log(injectedFunction());";

但是这种变体非常糟糕,因为在这种情况下页面的 CSP 可能会阻止您的 JS。文档.body.appendChild(ele);

关于javascript - 如何在 chrome 扩展中使用 firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51586122/

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