我的扩展程序中有一个后台脚本,用于创建上下文菜单项并对其进行处理。单击它时,将创建包含特定详细信息的cookie。以下是该文件的来源:
的script.js
function createC() {
var x = 1;
var y = 2;
//Create Cookie
document.cookie = document.URL + "=" + " " + x + " " + y + " ; " + 4102444799;
console.log("Cookie Created.");
}
chrome.contextMenus.create({
title: "Create Cookie",
contexts:["all"],
onclick: createC,
});
显然,其中使用的变量用于测试。当我在控制台中运行document.cookie;
时,cookie不会出现。 我尝试使用chrome.cookies
API并遇到了同样的问题。
Cookie是否因为在后台脚本中创建而未显示?我试图在用户所在的当前选项卡上设置它,而不是背景页面本身。
的manifest.json
{
"manifest_version": 2,
"name": "MyExtension",
"description": "Do stuff",
"version": "0.1",
"icons": { "16": "icon.png",
"48": "icon.png",
"128": "icon.png" },
"options_page": "options.html",
"permissions": [
"tabs", "<all_urls>", "contextMenus", "cookies"
],
"background": {
"scripts": ["script.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["nav.js"]
}
]
}
答案 0 :(得分:0)
在后台脚本中,“文档”不适用于当前页面,而是适用于扩展程序背景页面(chrome-extension:// [您的扩展ID] /bacground.html)。所以,你不能使用'document.cookie',你需要尝试chrome.cookies.get这样:
/**
* Create cookie for the special page
* @param {Object<key, value>} detail
* @param {Function=} opt_callback
*/
function createCookie(detail, opt_callback) {
chrome.cookies.set(detail, opt_callback);
}
答案 1 :(得分:0)
如果您想使用document
当前页面而不是background.html
,则需要在特定标签中使用javascript代码。
这可以通过函数executeScript
来完成,您的语法是:
chrome.tabs.executeScript( tabId, details, callback )
chrome.tabs.executeScript( MyTabIdNumberMandatoryInYourCase, MyScriptCodeInLineOrUrl, MyCallbackOptional )
tabId
与有效标签页的ID
相匹配,background.js
文件在主background.html
下执行,然后您需要通过如果您没有传递正确的ID,希望它会执行background.html
作为活动标签。
所有WebRequest
个事件都有一个名为details
的变量且她带有tabid
值,您可以通过details.tabId
访问它,下面是我用过的代码我已经创建了一个扩展程序。
var onCompletedExecuteScriptDetails = {
// You can run all the code in the inline form,
// rather than using the parameter "file", use the "code" parameter, but is very ugly,
// is much more elegant to use the "file" mode
// my-script.js is a file with code to create cookie
file : "my-script.js"
};
var onCompletedExecuteScript = function ( details ) {
chrome.tabs.executeScript( details.tabId, onCompletedExecuteScriptDetails );
};
var onCompletedCallback = function ( details ) {
document.addEventListener( 'DOMContentLoaded', onCompletedExecuteScript( details ) );
};
var onCompletedFilter = {
urls : [
"http://*/*",
"https://*/*"
]
};
chrome.webRequest.onCompleted.addListener( onCompletedCallback, onCompletedFilter, onCompletedInfo );
答案 2 :(得分:0)
我最终使用了:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.url != null) {
url = changeInfo.url;
}
});
答案 3 :(得分:0)
这就是我最终要做的。
在 c.RegisterType<IStorageOperations>(new InjectionFactory(c =>
configuration.GetValue<bool>("UseMock:Storage") ?
(IStorageOperations) new FileOperations() :
new S3StorageService()));
中:
manifest.json
在 "permissions": [
"cookies",
"*://*.target_website.com/",
"*://*/_generated_background_page.html"
]
background.js