Проблемы с расширением Firefox/Chrome, Uncaught ReferenceError: jsonp_callback__ не определен
У меня возникают проблемы с этим скриптом, когда я пытаюсь создать расширение Firefox / Chrome, он всегда выдает мне эту ошибку
Uncaught ReferenceError: jsonp_callback__ is not defined
Использование TamperMonkey / GreaseMonkey работает нормально.
Похоже, проблема в функции jsonp, но мне кажется, что это нормально
Вот сценарий
'use strict';
const GeoMap = {
coords: [],
current_resouce: '',
__init: function () {
// Force Resource Buffer to 300
performance.setResourceTimingBufferSize(300);
// Do an initial capture then recursively repeat the action every 5 seconds
this.captureNetworkRequest();
this.registerEventListener();
},
registerEventListener: function () {
document.addEventListener('keydown', (evt) => {
if (evt.ctrlKey && evt.shiftKey && evt.keyCode == 8) {
this.captureNetworkRequest();
this.jsonp(this.current_resouce)
.then((d) => {
this.setLocationArray(d);
this.requestReloadOnFail();
this.openMap();
})
.catch((e) => {
this.requestReloadOnFail();
});
}
});
},
captureNetworkRequest: function () {
performance.getEntriesByType('resource').forEach((current_resource) => {
if (current_resource.initiatorType == 'xmlhttprequest' || current_resource.initiatorType == 'script' || current_resource.initiatorType == 'img') {
if (current_resource.name.includes('GeoPhoto') && !current_resource.name.includes('jsonp') && !current_resource.name.includes('_callbacks_')) {
this.current_resouce = current_resource.name
}
}
});
performance.clearResourceTimings();
setTimeout(() => this.captureNetworkRequest(), 5000);
},
jsonp: function (uri) {
return new Promise(function (resolve, reject) {
var id = '_' + Math.round(10000 * Math.random()),
callbackName = 'jsonp_callback_' + id,
src = uri + '&callback=' + callbackName,
script = document.createElement('script');
window[callbackName] = function (data) {
delete window[callbackName];
var ele = document.getElementById(id);
ele.parentNode.removeChild(ele);
resolve(data);
};
script.src = src;
script.id = id;
script.addEventListener('error', reject);
(document.getElementsByTagName('head')[0] || document.body || document.documentElement).appendChild(script)
})
},
setLocationArray: function (gmaps = []) {
var paths = [
[1, 0, 5, 0, 1, 0],
[1, 5, 0, 1, 0]
],
tempArray = [],
found = false;
paths.forEach(path => {
if (found) return tempArray;
tempArray = gmaps;
for (var i = 0; i < path.length; i++) {
if (path[i] in tempArray && Array.isArray(tempArray[path[i]])) tempArray = tempArray[path[i]];
found = (i == path.length - 1 && tempArray.length >= 4);
}
});
try { this.coords = tempArray.slice(2, 4) }
catch { this.coords = [] }
},
requestReloadOnFail: function () {
if (this.coords.length < 2 && confirm("Could not find any coordinates. Should I force a reload so you can try again?")) {
window.location.reload(true);
}
},
openMap: function () {
window.open(`https://www.google.com/maps/search/${this.coords[0]},+${this.coords[1]}`)
}
};
GeoMap.__init();
Вот файл manifest.json, который я использую
"description": "test",
"manifest_version": 2,
"name": "Test",
"version": "1.0",
"homepage_url": "https://test",
"icons": {
"48": "icons/border-48.png"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["test.js"]
}
],
"permissions": [
"<all_urls>",
"clipboardWrite",
"cookies",
"downloads",
"notifications",
"storage",
"tabs",
"unlimitedStorage",
"webNavigation",
"webRequest",
"webRequestBlocking"
]
}
Понятия не имею, как это исправить, я тоже пробовал делать глобальные функции, но не исправил