Я на самом деле работал над этим, используя API localStorge.
Примечание: чтобы использовать это, наш contentcript должен быть в состоянии прочитать localStorage.
В файле manifest.json просто добавьте строку «storage»:
"permissions": [...,"storage"]
Функция угона живет в скрипте контента:
function hijack(callback) {
"use strict";
var code = function() {
//We have access to topframe - no longer a contentscript
var ourLocalStorageObject = {
globalVar: window.globalVar,
globalVar2: window.globalVar2
};
var dataString = JSON.stringify(ourLocalStorageObject);
localStorage.setItem("ourLocalStorageObject", dataString);
};
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
callback();
}
Теперь мы можем звонить из содержания
document.addEventListener("DOMContentLoaded", function(event) {
hijack(callback);
});
или, если вы используете jQuery в вашем файле содержания, как я:
$(document).ready(function() {
hijack(callback);
});
для извлечения содержимого:
function callback() {
var localStorageString = localStorage.getItem("ourLocalStorageObject");
var ourLocalStorageObject= JSON.parse(localStorageString);
console.log("I can see now on content script", ourLocalStorageObject);
//(optional cleanup):
localStorage.removeItem("ourLocalStorageObject");
}
Это можно вызвать несколько раз, поэтому, если ваша страница изменяет элементы или внутренний код, вы можете добавить прослушиватели событий, чтобы обновить ваше расширение новыми данными.
Редактировать: я добавил обратные вызовы, чтобы вы могли быть уверены, что ваши данные не будут недействительными (была эта проблема сама)