Мобильный твиттер, скрипт Greasemonkey не работает - PullRequest
1 голос
/ 31 августа 2011

У меня проблема со скриптом, который не выполняется в мобильном твиттере. Я пробовал это на многих версиях Firefox, включая FF5, FF8 и FF9.

Я использовал последние версии Greasemonkey. Прямо сейчас у меня есть FF9 с GM 0.9.10. У меня нет проблем с выполнением скрипта на обычном твиттере, но на мобильном он не работает. Может быть, как-то связано с HTTPS?

Вот скрипт:

// ==UserScript==
// @name           Twitter Mobile
// @namespace      http://www.test.com
// @include        https://mobile.twitter.com/*
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

function MainLoop() {

if(typeof unsafeWindow.jQuery == 'undefined') {
    window.setTimeout(MainLoop, 100);
    return;
}

var $ = unsafeWindow.jQuery;

$(document).ready(function(){
          //do something here
});
window.setTimeout(MainLoop, 2000);
}

MainLoop();

Я перепробовал все возможное. Также проверил альтернативы @require и попробовал их. Я не знаю, почему он отказывается выполнить.

Ответы [ 3 ]

0 голосов
/ 31 августа 2011

Все эти MainLoop вещи не требуются, а также форсируют неправильный экземпляр jQuery.

Пожалуйста, сделайте следующее:

  1. Переключитесь на последнюю версию стабильный версия Firefox (текущая версия 6).

  2. Удалите в скрипте все, что осталось после // ==/UserScript==, кроме части //do something here.

    1. Не использовать unsafeWindow.jQuery.
    2. Вам не нужны $(document).ready звонки;Greasemonkey по умолчанию выполняется в нужное время.
    3. Удалить текущие setTimeout() вызовы;они контрпродуктивны.


  3. Измените директиву @require на:

    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
    


  4. Вставьте или ссылку на полный сценарий!Текущий сценарий, вероятно, дает сбой в основном потому, что он проверяет что-то на странице, которая является AJAXed-в.
    обойти это с помощью кода, подобного следующему:На самом деле, этот скрипт работает отлично:

    // ==UserScript==
    // @name            _mobile twitter
    // @include         https://mobile.twitter.com/*
    // @require         http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
    // ==/UserScript==
    
    setInterval (function() { checkForTweetbox (); }, 500);
    
    function checkForTweetbox () {
        var tweetbox = document.querySelector ('#message_text');
        if (tweetbox) {
            if (! tweetbox.weHaveProcessed) {
                tweetbox.weHaveProcessed    = true;
                tweetbox.value              = 'GM\'s jQuery version is: ' + $.fn.jquery;
            }
        }
    }
    

    Если вы вошли в твиттер-мобайл, он предварительно загрузит твит в окне сообщения (но не отправит).

0 голосов
/ 31 августа 2011

Редактировать: как заметил Брок, этот ответ устарел с GreaseMonkey 0.9.0.

Тег @require обрабатывается только при первой установке скрипта. Поэтому изменение строки @require ничего не изменит, так как после установки скрипта ничего не будет загружено.

См. Также Как я могу использовать jQuery в Greasemonkey?

0 голосов
/ 31 августа 2011

mobile.twitter.com возвращает следующий HTTP-заголовок в своем ответе:

X-Content-Security-Policy: allow 'self'; img-src *.twitter.com *.twimg.com maps.google.com data:; media-src *.twitter.com *.twimg.com; style-src *.twitter.com *.twimg.com; frame-ancestors *.twitter.com; script-src *.twitter.com *.twimg.com api-secure.recaptcha.net; report-uri https://mobile.twitter.com/csp_violation_report

Этот заголовок определяет Политика безопасности содержимого . Важной частью здесь является script-src *.twitter.com *.twimg.com api-secure.recaptcha.net, это ограничивает сценарии на этой странице несколькими доменами. Скрипты из других доменов не могут быть загружены, даже GreaseMonkey (и если вы откроете консоль ошибок, вы увидите соответствующие предупреждения).

Я предлагаю вам вставить jQuery в ваш скрипт GreaseMonkey вместо того, чтобы пытаться внедрить его в веб-страницу. Это увеличит размер вашего скрипта, но по крайней мере вы сможете использовать его надежно - и вам больше не нужно будет ждать загрузки jQuery.

Примечание: я полагаю, что Twitter тестирует CSP на мобильном сайте, где он оказывает меньшее влияние, прежде чем развертывать его и на основном сайте. Так что ваш скрипт для основного сайта также может скоро перестать работать.

...