Расширение Chrome iframe dom reference disqus - PullRequest
0 голосов
/ 19 июня 2011

Как получить ссылку на домен междоменного iframe / frame?

Я хочу сделать что-то, чтобы отклонить комментарии с расширением.

Мой манифест имеет следующее:

"all_frames": true,
"matches": ["*://*.disqus.com/*","*://disqus.com/*", "http://somesite.com"]

Я не пытаюсь общаться вне рамок - то есть js позаботится о работе без необходимости «рассказывать» мне что-либо.

all_frames должен вставлять перечисленные js-файлы в каждый кадр, нет?

Когда я делаю это:

if (window != window.top){
  alert('In an IFRAME: ' + window.location.href);
}

... Я получаю ожидаемые URL-адреса disqus.

Но когда я сделаю это:

var btnCommentBlock = document.getElementsByClassName('dsq-comment-buttons');
alert('btnCommentBlock length: ' + $(btnCommentBlock).length);

... Я получаю 0 для длины.

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Я обновил свой ответ до Javascript для доступа к текстовому полю комментария Disqus?

В основном, Disqus изменил селектор. Они больше не используют textarea, они используют contenteditable div.

Примерно так должно работать:

// We just need to check if the IFrame origin is from discus.com
if (location.hostname.indexOf('.disqus.com') != -1) {
  // Extract the textarea (there must be exactly one)
  var commentBox = document.querySelector('#comment');
  if (commentBox) {
    // Inject some text!
    commentBox.innerText = 'Google Chrome Injected!';
  }
}

Исходный код: https://gist.github.com/1034305

0 голосов
/ 19 июня 2011

Woohoo!Я нашел ответ на github:

https://gist.github.com/471999

Рабочий код:

$(document).ready(function() {
  window.disqus_no_style = true;

  $.getScript('http://sitename.disqus.com/embed.js', function() {
    var loader = setInterval(function() {
      if($('#disqus_thread').html().length) {
        clearInterval(loader);
        disqusReady();
      }
    }, 1000);
  });

  function disqusReady() {
    //whatever you can imagine
  }
});

Я поместил это в функцию disqusReady ():

var aTestHere = document.getElementsByClassName('dsq-comment-body');
alert(aTestHere[0].innerHTML);

... и вернул innerHTML, как и ожидалось.

Мохамед, я бы очень хотел поблагодарить вас за то, что вы нашли время для общения с моим вопросом.Если бы вы не разместили эту ссылку на github, невозможно сказать, когда бы я когда-нибудь понял это или нашел другой код.


edit: после нескольких минут эксперимента это выглядит такнет необходимости вызывать getScript, так что вы должны иметь возможность это закомментировать.

Также не нужен window.disqus_no_style, поэтому я тоже это закомментировал.

Я еще немного поэкспериментирую и обновлюответь позже.Одно из этих двух обстоятельств помешало мне на самом деле опубликовать комментарий на сайте disqus, который я использую.// они по-прежнему позволяют доступ к домену и возможность публикации.

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