Попытка заставить этот селектор jQuery работать в FF, в настоящее время работает только в IE; относительно ReportViewer 2008 - PullRequest
0 голосов
/ 07 марта 2011

Веб-элемент управления ReportViewer 2008 генерирует неприятную структуру HTML DOM. Я пытаюсь добраться до определенного элемента в глубине HTML, и в настоящее время я могу только заставить свой селектор jQuery работать в IE. Я надеюсь, что кто-то может помочь мне с этой последней частью!

HTML-код, о котором мы говорим, выглядит следующим образом (например, упрощенно):

<div id="uxReportViewer">
    <iframe id="ReportFrame_uxReportViewer">
        <html>
            <frameset id="frameset">
                <frame name="docmap" id="docmap" />
                <frame name="report" id="report">
                    <html>
                        <body class="r0">
                            <div id="oReportDiv">
                                <table>
                                    <tbody>
                                        <tr>
                                            <td id="oReportCell" /> <!-- Goal -->
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        </body>
                    </html>
                </frame>
            </frameset>
        </html>
    </iframe>
    <iframe id="PrintFrame_uxReportViewer" />
</div>

Это элемент <td id="oReportCell" />, который мне нужно схватить.

В настоящее время это работает в IE:

$('div#oReportDiv > table > tbody > tr > td#oReportCell',
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')[0]
        .document
        .frames["report"]
        .document
);

Но в FF я могу зайти так далеко, даже в область, которую я указал:

$('#uxReportViewer > iframe:eq(0)')
    .contents()
    .find('html')[0] // good through here
    .document;       // document is not defined

Вместо .document в FF есть атрибут ownerDocument и parentNode, которые являются типами HTMLDocument, но тогда я не могу найти фреймы в документе.

Есть идеи?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 марта 2011

Я немного ударился головой и обнаружил, что это работает и в IE8, и в FF3.6:

$('#oReportCell', 
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')
        .contents()
        .find('frame[name=report]')[0]
        .contentWindow // supported by modern browsers
        .document
);

Это не красиво, но работает.

0 голосов
/ 07 марта 2011

Я тестирую в Chrome.

При использовании вашего точного HTML-кода содержимое IFRAME представляет собой просто пустую ГОЛОВКУ и пустое ТЕЛО. Я не могу получить РАМЫ.

Это:

$('#uxReportViewer iframe:first').contents().find('html')[0].innerHTML

вернет:

<head></head><body></body>

Смотрите здесь: http://jsfiddle.net/simevidas/REdeN/

0 голосов
/ 07 марта 2011

РЕДАКТИРОВАТЬ: Хорошо, не знал этого. HTML Tidy считает, что HTML не совсем корректен:

HTML Tidy Parsing ...
line 19 column 9 - Warning: discarding unexpected <html>
line 18 column 5 - Warning: missing </iframe> before <frameset>
line 17 column 1 - Warning: missing </div> before <frameset>
line 20 column 13 - Warning: <frameset> isn't allowed in <body> elements
line 10 column 1 - Info: <body> previously mentioned
line 21 column 17 - Warning: <frame> isn't allowed in <body> elements
line 10 column 1 - Info: <body> previously mentioned
line 3 column 1 - Warning: inserting missing 'title' element
line 4 column 3 - Warning: <style> inserting "type" attribute
line 7 column 3 - Warning: <script> inserting "type" attribute
Info: Document content looks like HTML Proprietary
8 warnings, 0 errors were found!

Возможно, jQuery не предназначен для работы в таких условиях.

...