Использование Greasemonkey для добавления класса в тело iframe - PullRequest
1 голос
/ 26 ноября 2011

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

    ...
    <body>
    <iframe src="blabla/blabla..."></iframe>
    </body>
    ...

iframe загружает другой файл HTML из того же домена;у него есть собственное тело

В Firebug это выглядит так:

    ...
    <body>
    <iframe src="blabla/blabla...">
    ...
    <body class="classname ">
    ...
    </body>
    </iframe>
    </body>
    ...

Проблема в том, что сайт будет проще просматривать, если бы я мог добавить имя второго классако второму телу, например:

    ...
    <body>
    <iframe src="blabla/blabla...">
    ...
    <body class="classname classname2">
    ...
    </body>
    </iframe>
    </body>
    ...

Я не являюсь владельцем домена, я просто хочу «ремикшировать» веб-контент.

Я пробовал такие вещи:

    // ==UserScript==
    // @name           descr
    // @namespace      http://localhost
    // @description    descr
    // @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
    // @include        http://web.site/sub.ab*
    // ==/UserScript==

    $("iframe").load(function(){
    alert(document.getElementById('frameid').contentDocument);

    });

Их идея заключалась в использовании

document.getElementById('frameid').contentDocument.document.getElementsByTagName('body')[0].addClass('classname2')

Но это не работает.Пробовал тоже самое с помощью contentwindow, опять ничего.Оповещение сообщает мне, что указан указанный элемент: [object HTMLDocument], но когда я что-то набираю, например .document, оповещение становится пустым или не отображается вообще.

Что я делаю неправильно?

Редактировать: Не уверен, что это как-то связано с этим, но я забыл сказать, что на самом деле есть 2 фрейма: один блокируется Adblocker, поэтому я не упомянул об этомдо этого.

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

В Greasemonkey это действительно легко. Сценарий GM будет запускаться на iFrame, так же, как и на содержащей странице.

Итак, если вы создадите второй GM скрипт, подобный этому:

// ==UserScript==
// @name            descr, iFrame handler
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js
// @include         http://IFRAME_SITE.COM/blabla/blabla...
// ==/UserScript==

$("body").addClass ('classname2');

Это будет работать без суеты.

Обратите внимание, что вы можете делать все только с одним сценарием GM, но это может быть сложно, если вы не будете осторожны. Будьте проще, пока.

0 голосов
/ 26 ноября 2011

$('iframe').contents()find('body').addClass('className2');

...