Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 如何在chrome extension中以编程方式读写脚本以供脱机使用?_Google Chrome_Google Chrome Extension - Fatal编程技术网

Google chrome 如何在chrome extension中以编程方式读写脚本以供脱机使用?

Google chrome 如何在chrome extension中以编程方式读写脚本以供脱机使用?,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我需要有预定义的脚本,可从chrome content_脚本访问,可以从给定的URL自动更新 正是我所做的: 我有content_script.js。在它里面,我想从预定义的html+css+js为当前页面创建iframe。有时候html、css或js可以更改。我想避免更新扩展,相反,每次用户上网时,他都可以加载新的html+css+js以供进一步脱机使用 那么,如何从内容脚本读取和写入扩展内的一些内部文件(或将此任务委托给后台脚本)?您可以读取扩展文件内容,但无法写入扩展文件夹,因为它是沙盒

我需要有预定义的脚本,可从chrome content_脚本访问,可以从给定的URL自动更新

正是我所做的:

我有content_script.js。在它里面,我想从预定义的html+css+js为当前页面创建iframe。有时候html、css或js可以更改。我想避免更新扩展,相反,每次用户上网时,他都可以加载新的html+css+js以供进一步脱机使用


那么,如何从内容脚本读取和写入扩展内的一些内部文件(或将此任务委托给后台脚本)?

您可以读取扩展文件内容,但无法写入扩展文件夹,因为它是沙盒

要读取扩展文件,只需使用
chrome.runtime.getURL(“文件路径”)
作为url发送Ajax调用即可

var xhr = new XMLHttpRequest();
xhr.open('GET', chrome.runtime.getURL('your file path'), true);
xhr.onreadystatechange = function() {
    if (chr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        var text = xhr.responseText;
        // Do what you want using text
    }
};
xhr.send();

您可以读取扩展名文件内容,但无法写入扩展名文件夹,因为它是沙盒

要读取扩展文件,只需使用
chrome.runtime.getURL(“文件路径”)
作为url发送Ajax调用即可

var xhr = new XMLHttpRequest();
xhr.open('GET', chrome.runtime.getURL('your file path'), true);
xhr.onreadystatechange = function() {
    if (chr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        var text = xhr.responseText;
        // Do what you want using text
    }
};
xhr.send();
您可以使用为文件设置读/写位置,或者仅将其作为字符串存储在
chrome.storage
(根据需要使用
“unlimitedStorage”
权限)中,以便以后重用

然后,可以使用
executeScript
在内容脚本中执行此代码,或者,如果为扩展CSP启用了
'safe-eval'
,则可以在主脚本中执行此代码(这是危险的,在大多数情况下应该避免)

请注意,此文件系统API有一个警告,即它仅在Chrome中受支持,但这不应该是一个问题(Firefox/WebExtensions平台明确拒绝自我更新机制)。

您可以使用它来为文件设置读/写位置,或者仅将其作为字符串存储在
Chrome.storage
(使用
“unlimitedStorage”
权限(根据需要),以便以后重用

然后,可以使用
executeScript
在内容脚本中执行此代码,或者,如果为扩展CSP启用了
'safe-eval'
,则可以在主脚本中执行此代码(这是危险的,在大多数情况下应该避免)


请注意,此文件系统API有一个警告,即它仅在Chrome中受支持,但这不应该是一个问题(Firefox/WebExtensions平台明确拒绝自我更新机制)。

我们可以使用此API写入扩展文件夹吗?@HaibaraAi很抱歉没有响应-不,扩展无法自我修改(如果是这样的话,作为一种防篡改措施,它将导致立即禁用)。HTML5文件系统是虚拟的,没有映射到真实文件系统上的任何文件夹。感谢您提供的信息,因此仅就这个问题而言,答案应该是否定的,因为扩展无法修改自身(更新除外)。但您始终可以计算可以存储在某处的代码。
eval(“…”
对于主代码,
executeScript({code:“…”})
用于内容脚本。我可能不明白你的方法,如果你是说
eval
,我想可能有点…难看。我们可以使用此api写入扩展文件夹吗?@HaibaraAi很抱歉没有响应-不,扩展无法自我修改(如果这样做,将导致作为防篡改措施立即禁用).HTML5文件系统是虚拟的,没有映射到真实文件系统上的任何文件夹。感谢您提供的信息,因此仅就这个问题而言,答案应该是否定的,因为扩展无法修改自身(更新除外)。但您始终可以评估可以存储在某处的代码。
eval(“…”)
对于主代码,
executeScript({code:“…”})
用于内容脚本。我可能不明白你的方法,如果你是说
eval
,我想可能有点……难看。