微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript和Chrome扩展程序:通过自定义事件传递变量

如何解决JavaScript和Chrome扩展程序:通过自定义事件传递变量

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大喊大叫,以帮助我并使这一结果成为可能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。