Не удается получить доступ к содержимому iframe, введенному через скрипт содержимого Google Chrome с помощью jquery - PullRequest
1 голос
/ 22 сентября 2011

поэтому я создаю это расширение Chrome, внедряя скрипт содержимого в тело:

это мой javascript:

test.js:

$(document).ready(function(){
   Url = chrome.extension.getURL('etc.html');
   link = '<iframe src="' + Url + '" id="frame" scrolling="no" frameborder="0px"></iframe>';
   $('body').prepend(link);
   alert($('.test').html());   
});

это содержимое etc.html, которое должно идти в iframe

etc.html:

<div class="test">An html</div>

и это мой манифест.json

manifest.json:

{
   "content_scripts": [ {
      "all_frames": true,
      "js": [ "js/jquery.js", "js/test.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_end"
   } ],
   "description": "Testing",
   "name": "test",
   "permissions": [ "tabs", "http://*/*", "https://*/*", "notifications", "management", "unlimitedStorage", "bookmarks", "contextMenus", "cookies", "geolocation", "history", "idle" ],
   "version": "2.0.0.53"
}

iframe был успешно вставлен в тело, появляется содержимое iframe, и я увидел его через инспектор chrome ...

но затем, когда js запустил строку alert($('.test').html());, он вернул null вместо возврата html .... как именно я получаю доступ к содержимому внутри iframe при разработке таких расширений

Я тоже пытался $('#frame').contents().find('.test').html(); безрезультатно

1 Ответ

0 голосов
/ 18 октября 2011

Я почти уверен, что ты не сможешь этого сделать.Прямо сейчас я не могу найти что-нибудь в Интернете, чтобы поддержать это, но я помню эту проблему.Я думаю, причина этого в том, что другие скрипты и расширения не будут связываться с вашим etc.html.

Что вы можете сделать, это иметь доступ к javascript внутри etc.html и изменять его DOM.Если вам нужно, чтобы он связывался со скриптом контента, который внедрил iframe, вы можете сделать это, передав сообщения через фоновую страницу: http://code.google.com/chrome/extensions/messaging.html

Например, вы можете сделать это с помощью простых одноразовых запросов:

etc.html

chrome.extension.sendRequest(msg)

backround.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.tabs.sendRequest(sender.tab.id, request);
});

contentscript.js

chrome.extension.onRequest.addListener(function(req, sender, sendResponse) {
    //do stuff
}

Вы можете сделать то же самое с postMessage и onMessage.Дай мне знать, если тебе еще понадобится помощь.Я широко использую эту технику в своем расширении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...