незначительные изменения, необходимые для функции JavaScript - PullRequest
1 голос
/ 11 сентября 2011

У меня есть требование для получения содержимого iframe на веб-странице. Я нашел следующий код, который делает это правильно ---

<html>
<head>

</head>
<body>
<script type="text/javascript"> <!-- Function can also be loaded from an external file -->
function getContentFromIframe(iFrameName) // the function has one parameter: the iframe's ID.
{                                         // I did it this way, so you can call it for multiple iframes.

    var myIFrame = document.getElementById(iFrameName); // Creating an object of the iframe
var content = myIFrame.contentWindow.document.body.innerHTML; // Getting it's content into a variable

// Basically now, in the variable 'content' you have the content of your iframe,
// and can do anything you want with it.
alert('content: ' + content);    // here it is


// You can even choose to change it afterwards
content = 'The inside of my frame has now changed'; // create a new content
myIFrame.contentWindow.document.body.innerHTML = content; // and set it
}

</script>
<iframe id="iframe1" src="http://www.google.com/"></iframe> <!-- Instantiating the iframe -->
<br />
<a href="#" onclick="getContentFromIframe('iframe1')">Get the content</a> <!-- Calling the function -->

</body>

</html>

Теперь я планирую использовать вышеуказанный код в расширении Google Chrome - в основном, когда я нажимаю на кнопку расширения, тогда на веб-страницу будет вставлен код javascript, и здесь мне нужно получить содержимое iframe с именем " iframe1" .

Я понимаю, что в функции 'getContentFromIframe' значение идентификатора iframe передается в качестве входного параметра. Поэтому я изменил код на следующий, надеясь получить содержимое iframe -

var myIFrame = document.getElementById('iframe1'); // Creating an object of the iframe
var content = myIFrame.contentWindow.document.body.innerHTML; // Getting it's content into a variable

// Basically now, in the variable 'content' you have the content of your iframe,
// and can do anything you want with it.
alert('content: ' + content);    // here it is

Однако я не получаю никакого значения содержимого iframe. Что я здесь не так делаю? Я не знаю много JavaScript, поэтому я подозреваю, что мой синтаксис где-то не так?

Ниже приведено содержимое моего manifest.json ---

{
  "name": "Link Submitter",
   "version": "1.0",
  "background_page": "bg.html",
  "description": "Link Submitter by SEO Power Toys",
   "browser_action": {
      "name": "Send Data",
      "default_icon": "icon.png",
      "default_title": "Send data to Link Submitter"      // optional; shown in tooltip
  },  
  "permissions": [ "tabs",
       "bookmarks",
           "http://*/*",
           "https://*/*",
            "unlimitedStorage"
     ]

}

Также приведено ниже сообщение об ошибке, которое я получаю в консоли Javascript, когда я пытаюсь запустить расширение Google Chrome-

 Uncaught TypeError: Cannot read property 'document' of undefined

1 Ответ

1 голос
/ 11 сентября 2011

Вы не можете напрямую получать доступ или манипулировать содержимым <iframe> элементов, которые содержат контент из домена, отличного от вашего собственного. Есть несколько способов связи между фреймами, но они требуют, чтобы контент из обоих доменов был готов к этому; вы не можете просто ожидать, что любая случайная страница будет работать с этими (довольно новыми) API.

Теперь от расширения , конечно, правила другие. Однако, если вы играете с кодом на обычной веб-странице, он просто не будет работать.

edit & mdash; Здесь - это тестовый пример для вашего кода. Кажется, работает просто отлично.

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