1

В моем расширении Chrome я вставляю сценарий содержания во все IFRAMEs внутри страницы. Вот часть файла manifest.json:Есть ли способ однозначно идентифицировать iframe, выполняемый скриптом контента для моего расширения Chrome?

"content_scripts": [ 
    { 
     "run_at": "document_end", 
     "all_frames" : true, 
     "match_about_blank": true, 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["content.js"] 
    } 
], 

Так один веб-страницы, имеющей несколько IFRAMEs будет в конечном итоге работает, что много копий моего впрыскивается content.js.

Логика внутри content.js собирает данные от каждого IFRAME он вводится в или из основной/главной страницы, и посылает его обратно в фоне сценария (с использованием chrome.runtime.sendMessage.) The фоновый скрипт в свою очередь, должен хранить данные в глобальной переменной, которые позже используются в самом расширении.

Проблема, с которой я сталкиваюсь, заключается в том, что приложение должно различать «данные», полученные от нескольких IFRAMEs, так как мой метод сбора данных может вызываться повторно при взаимодействии пользователя со страницей, и поэтому я не могу просто «сбрасывать» «данные, полученные в фоновом сценарии в массив. Вместо этого мне нужно использовать хранилище данных типа dictionary.

я могу сказать, если данные поступают из IFRAME или с главной страницы, выполнив следующие действия:

//From the `content.js` 
var isIframe = window != window.top; 

и мое мышление было то, что если я собираю страницы URL, каждый IFRAME то я должен быть в состоянии использовать его в качестве уникального ключа для хранения данных в соответствии с моей глобальной переменной типа словарь:

//Again from content.js 
var strUniqueIFrameURL = document.URL; 

Ну, что не будет работать, потому что два или более IFRAMEs могут иметь одни и те же URL.

Таким образом, мой первоначальный вопрос - как рассказать IFRAMEs на странице отдельно? Есть ли какой-то уникальный идентификатор или что-то подобное, которое Chrome назначает им?

+0

Чтобы переформулировать ваш вопрос. Скажем, есть страница с 3 '