Не удалось получить объект документа для главной страницы определенных сайтов в Opera

Мы создаем расширение для оперы, в котором мы пытаемся использовать свойство объекта документа (document.body.innerHTML), чтобы получить исходный код главной страницы сайта. В большинстве случаев он предоставляет нам правильный источник страницы, но для некоторых сайтов (тех, которые имеют несколько слоев документов) он не возвращает самый верхний документ.

Например, для сайта (https://www.pcisecuritystandards.org/) мы хотели бы использовать источник для отображаемой главной страницы, но после загрузки всей страницы свойство документа будет отображать источник для другого слоя (https ://s7.addthis.com/static/r07/sh29.html#cb=0&ab=-&dh=www.pcisecuritystandards.org&dr=&du=https%3A%2F%2Fwww.pcisecuritystandards.org%2F&dt=Official%20PCI% 20Security%20Standards%20Council%20Site%20-%20Verify%20PCI%20Compliance%2C%20Download%20Data%20Security%20and%20Credit%20Card%20Security%20Standards&inst=1&lng=en&pc=men&pub=&ssl=1&sid=4d2ee1f1&0srde1f91bsrde &srp=0.2&srx=0&ver=250&xck=0&rev=86981&xd=1)

Возможно, это связано с тем, как Opera загружает слои документа на странице. Мы не сталкивались с какими-либо проблемами с любым другим браузером

Как мы можем получить исходный код главной страницы (https://www.pcisecuritystandards.org/), используя объект документа в Opera?


person vijayfromzukmo    schedule 18.01.2011    source источник


Ответы (3)


Похоже, вы, возможно, находитесь в <iframe>. Внедренные скрипты будут внедрены в верхний документ, а также в любой iframe на странице, поэтому просто убедитесь, что вы находитесь в самом верхнем окне, прежде чем захватывать innerHTML. Что-то вроде if (window.self == window.top).

person miketaylr    schedule 19.01.2011

Пробовали ли вы использовать стрекозу, полезно понять, что происходит с Opera. Прямо сейчас я использую Opera 11, и когда я захожу на страницу, которую вы упомянули. У меня есть несколько вещей в innerHTML.

"<div style="visibility: hidden; height: 1px; width: 1px; position: absolute; z-index: 100000" id="_atssh"><iframe id="_atssh827" style="height: 1px; width: 1px; position: absolute; z-index: 100000; border-top-color: currentColor; border-left-color: currentColor; border-right-color: currentColor; border-bottom-color: currentColor; border-top-width: 0px; border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-top-style: none; border-left-style: none; border-right-style: none; border-bottom-style: none; left: 0px; top: 0px" src="//s7.addthis.com/static/r07/sh30.html#cb=0&amp;ab=-&amp;dh=www.pcisecuritystandards.org&amp;dr=&amp;du=https%3A%2F%2Fwww.pcisecuritystandards.org%2F&amp;dt=Official%20PCI%20Security%20Standards%20Council%20Site%20-%20Verify%20PCI%20Compliance%2C%20Download%20Data%20Security%20and%20Credit%20Card%20Security%20Standards&amp;inst=1&amp;lng=fr&amp;pc=men&amp;pub=&amp;ssl=1&amp;sid=4d358407b896251f&amp;srd=1&amp;srf=0.02&amp;srp=0.2&amp;srx=0&amp;ver=250&amp;xck=0&amp;rev=88088&amp;xd=1"></iframe></div>
    <a name="top" id="top"></a>
    <div id="container">
      <a name="index" id="index"></a>
[…etc]

<h2>NEWS</h2>

Итак, мы можем видеть раздел новостей, так что я действительно возвращаюсь на домашнюю страницу. Обратите внимание, что некоторая разметка была введена через скрипты. Не могли бы вы вставить фрагмент кода, который вы используете.

person karlcow    schedule 18.01.2011
comment
вар div = document.createElement('div'); div.id = идентификатор окна; div.setAttribute('стиль', event.data); оповещение (документ.тело.innerHTML); документ.тело.appendChild(div); - person vijayfromzukmo; 18.01.2011
comment
Спасибо за ваш ответ. Я добавил код над этим комментарием. Я пытался получить ссылку на объект документа на главную страницу, но вместо этого получил ссылку на объект документа iframe на главной странице. Я вставил строку innerHTML, чтобы проверить содержимое, на которое ссылается объект документа. Моя первоначальная цель состояла в том, чтобы добавить тег ‹div› к источнику на главной странице. - person vijayfromzukmo; 18.01.2011
comment
вы хотели добавить тег div внизу страницы, что и делает ваш код. Оповещение происходит по таб. Возможно, вам нужно что-то вроде popup.alert(), если это то, что вы хотите. - person karlcow; 18.01.2011
comment
мы использовали оповещение, чтобы проверить, на какой объект документа имеется ссылка, и он указывает на документ iframe, а не на главную страницу. Фактически наш тег div добавляется в документ в iframe, а не в документ на главной странице. Нам нужна помощь с доступом к ссылке объекта документа на главную страницу - person vijayfromzukmo; 19.01.2011

Мы проверили и обнаружили, что в случае оперы мы не получаем ссылку на самый верхний объект документа, независимо от того, какое свойство документа или окна мы пытались использовать. На самом деле мы пытались использовать window.top и window.parent, но ничто не предоставляло дескриптор объекта окна, и эти свойства возвращали значение null.

Относительно этого «внедренные скрипты будут внедрены в верхний документ, а также в любой iframe на странице», мы получили предупреждение (которое мы включили во внедренный скрипт) только из iFrame, но не из самого верхнего окна. мы обнаружили, что то, что вы сказали, верно только в Google Chrome и Safari.

person vijayfromzukmo    schedule 21.01.2011