问题描述
manifest.json
{
"name": "Omegle IP","version": "0.5","options_page": "options.html","options_ui": {
"page": "options.html","open_in_tab": false
},"background": {
"scripts": ["background.js"],"persistent": true
},"manifest_version": 2,"description": "Become a Hacker; You see the IP in the chat window","permissions": ["tabs","https://*.omegle.com/*","storage"],"web_accessible_resources": ["inject.js"],"content_scripts" : [{
"matches" : ["https://*.omegle.com/*"],"run_at": "document_end","js" : ["contentscript.js"]
}],"icons": {
"16": "16.png","32": "32.png","48": "48.png","128": "128.png"
}
}
contentscript.js
var s = document.createElement('script');
// Todo: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.runtime.getURL('inject.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
inject.js
chrome.storage.sync.get(['tracker','api'],function (obj) {
tracker = obj.tracker;
api = obj.api;
getIp(tracker,api);
});
function getIp(tracker,api){
console.log(tracker + api)
}
我无法从inject.js访问chrome.storage.sync.get
。但是我需要...有没有办法将chrome请求发送到contentscript并将变量传递给inject.js
contentscript.js基本上只是创建一个脚本字段并将inject.js放入其中。
通常,inject.js文件较大,但您不需要所有这些文件
有一篇文章“ https://stackoverflow.com/questions/9515704/use-a-content-script-to-access-the-page-context-variables-and-functions”如何实现,我尝试但是我没有实现它的工作...
您能提供一种可行的方法来使其正常工作吗?
更新:
contentscript.js
chrome.storage.sync.get(['tracker'],function (obj) {
tracker = obj.tracker;
ChromeExtensionData(tracker);
});
function ChromeExtensionData(tracker) {
var data = {
tracker: tracker,};
console.log("Sending:",tracker); // works
console.log(document.dispatchEvent(new CustomEvent('ChromeExtensionData',{ detail: data }))); // true
}
inject.js
document.addEventListener('ChromeExtensionData',function (e) {
var tracker = e.detail;
console.log('received',tracker);
});
getIp(tracker); // tracker is not definied
它在注释中出了什么问题。而且我真的不知道为什么
更新:
inject.js
document.addEventListener('ChromeExtensionData',function (e) {
console.log("Recieved"); // test -> doesnt work
var tracker = e.detail;
console.log('received',tracker); // doenst log anything
getIp(tracker);
});
contentscript.js
var s = document.createElement('script');
// Todo: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.runtime.getURL('inject.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
chrome.storage.sync.get(['tracker'],function (obj) {
tracker = obj.tracker;
ChromeExtensionData(tracker);
});
function ChromeExtensionData(tracker) {
jsontracker = JSON.stringify(tracker);
var data = {
tracker: jsontracker
};
console.log("Sending:",tracker); // works
document.dispatchEvent(new CustomEvent('ChromeExtensionData',{ detail: data }));
}
解决方法
工作答案
inject.js
document.addEventListener('ChromeExtensionData',function (e) { // waits for variable from contentscript
var data = e.detail;
tracker = data.tracker;
trollChecked = data.trollChecked;
getIp(tracker,trollChecked);
});
contentscript.js
var s = document.createElement('script');
s.src = chrome.runtime.getURL('inject.js');
s.onload = function() {
this.remove();
chrome.storage.sync.get(['tracker','troll'],function (obj) {
tracker = obj.tracker;
trollChecked = obj.troll
var data = {
tracker: tracker,trollChecked: trollChecked
};
document.dispatchEvent(new CustomEvent('ChromeExtensionData',{ detail: data })); // gets variable from optionspage and sends to the script
});
};
(document.head || document.documentElement).appendChild(s);
You can learn how to set chrome variables from here
向wOxxOm大喊大叫,以帮助我并使这一结果成为可能