Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№121-12-2009 01:27:06

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Помогите плиз адаптировать javascript: URL для FireFox

Помогите плиз адаптировать javascript: URL (букмарклет) для FireFox или создать скрипт для Greasemonkey

В IE отлично работает вот такая штука

javascript:t=document.body.outerHTML;autor_reg=/Автор:<\/B>[^>]*>([^<]*)/;autor=autor_reg.exec(t)[1];name_reg=/Название:[/s]*<\/[bB]>[^>]*>([^<]*)/;name=name_reg.exec(t)[1];year_reg=/Год:[/s]*<\/[bB]>[^\d]*(\d*)/;year=year_reg.exec(t)[1];s=name+' '+autor+' ('+year+')';clipboardData.setData('Text',s);

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

В Инете накопал, что FireFox не дружит с outerHTML, попробовал заменить на document.documentElement.innerHTML, текст странички выдает, но с кириллицей явные проблемы (в скрипте слова Автор, Название, Год).

javascript:t=document.documentElement.innerHTML;autor_reg=/Автор:<\/B>[^>]*>([^<]*)/;autor=autor_reg.exec(t)[1];name_reg=/Название:[/s]*<\/[bB]>[^>]*>([^<]*)/;name=name_reg.exec(t)[1];year_reg=/Год:[/s]*<\/[bB]>[^\d]*(\d*)/;year=year_reg.exec(t)[1];s=name+' '+autor+' ('+year+')';clipboardData.setData('Text',s);

Еще есть подозрение (в консоли ошибок вижу Ошибка: autor_reg.exec(t) is null Источник: javascript:t=document.documentElement.innerHTML;autor_reg=/%D0%90%D0%B2%D1%82%D0%BE%D1%80:<\/B>[^>]*>([^<]*)/;autor=autor_reg.exec(t)[1]), что вот здесь autor=autor_reg.exec(t)[1] FireFox не нравится [1] (я так понимаю 1-ый элемент массива? или проблема еще в autor_reg, связанная с кирилицей?)

Исходная информация (помогает понять предназначение букмарклета или скрипта)

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Заранее спасибо откликнувшимся :)

Отсутствует

 

№221-12-2009 17:31:34

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Помогите плиз адаптировать javascript: URL для FireFox

Вот такой вариант с alert() попробуйте:

Выделить код

Код:

javascript: td = document.getElementsByClassName('newsbody')[0].textContent; alert(td.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' - ' + td.match(/^Название:\xA0([^\n]*)$/m)[1]);

Отсутствует

 

№321-12-2009 18:04:04

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

luitzen пишет

javascript: td = document.getElementsByClassName('newsbody')[0].textContent; alert(td.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' - ' + td.match(/^Название:\xA0([^\n]*)$/m)[1]);

О, спасибо, работает, т.е. поменяв порядок элементов и добавив год, получаем:

javascript: td = document.getElementsByClassName('newsbody')[0].textContent; alert(td.match(/^Название:\xA0([^\n]*)$/m)[1] + ' - ' + td.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' (' + td.match(/^Год:\xA0([^\n]*)$/m)[1] + ')');

Для полного счастья осталось занести это в буфер а не выдать alert (если есть такая возможность)

Отсутствует

 

№421-12-2009 18:47:39

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
UA: Firefox 3.5
Веб-сайт

Re: Помогите плиз адаптировать javascript: URL для FireFox

Попробуйте через ClipboardHelper


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№522-12-2009 10:53:50

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

formatC'vt пишет

Попробуйте через ClipboardHelper

Спасибо, интуитивно чувствую - "оно", но опять же таки дело в том, что в JavaScript я даже не чайник, а подставка от него.

Я так понимаю, что в примере выше alert(); я должен заменить на gClipboardHelper.copyString(); с соответствующим содержимым? Но чтобы оно заработало надо куда-то воткнуть const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper);

Вопрос задачи - куда? Или совсем-совсем неправ?

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

Отсутствует

 

№622-12-2009 14:07:30

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Помогите плиз адаптировать javascript: URL для FireFox

Как-нибудь так тогда:

Выделить код

Код:

javascript: td = document.getElementsByClassName('newsbody')[0].textContent;netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(td.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' - ' + td.match(/^Название:\xA0([^\n]*)$/m)[1]);

Хотелось бы, конечно, ограничиться меньшими привилегиями и выкрутиться через .execCommand("Copy", false, null).
Но как я ни мучился со всякими capability.policy.allowclipboard, результата не достиг :(.

Отредактировано luitzen (22-12-2009 14:08:23)

Отсутствует

 

№722-12-2009 16:28:06

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

luitzen пишет

Как-нибудь так тогда:

Выделить код

Код:

javascript: td = document.getElementsByClassName('newsbody')[0].textContent;netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(td.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' - ' + td.match(/^Название:\xA0([^\n]*)$/m)[1]);

Хотелось бы, конечно, ограничиться меньшими привилегиями и выкрутиться через .execCommand("Copy", false, null).
Но как я ни мучился со всякими capability.policy.allowclipboard, результата не достиг :(.

Консоль ошибок пишет Ошибка: A script from «http://www.infanata.org» was denied UniversalXPConnect privileges.
Стоит правда NoScript, но на infanata он неактивен.

Отсутствует

 

№822-12-2009 17:24:34

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Помогите плиз адаптировать javascript: URL для FireFox

У меня всё работает, честно :). При первом применении появляется диалог, в котором спрашивается, можно ли дать сценарию дополнительные привилегии. Если выставить флаг «запомнить решение», то больше этот диалог не повляется.

Попробуйте отключить или удалить NoScript.

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

Отсутствует

 

№922-12-2009 21:56:39

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

luitzen пишет

При первом применении появляется диалог, в котором спрашивается, можно ли дать сценарию дополнительные привилегии. Если выставить флаг «запомнить решение», то больше этот диалог не повляется.

У меня этого диалога не было и отключение NoScript никак на это не повлияло. Диалог появился только после изменения в about:config параметра signed.applets.codebase_principal_support на true. После этого спрашивает о привилегиях. Изменение signed.applets.codebase_principal_support на true ничем страшным не чревато?

После всех проведенных операций скрипт работает именно так, как его просили.

Огромное спасибо luitzen и formatC'vt за помощь и терпение.

Можно ли опубликовать полученное решение на форуме natahaus.info с упоминанием и благодарностью luitzen и formatC'vt ?

Отсутствует

 

№1022-12-2009 23:04:59

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Помогите плиз адаптировать javascript: URL для FireFox

Kramar пишет

Можно ли опубликовать полученное решение на форуме natahaus.info с упоминанием и благодарностью luitzen и formatC'vt ?

luitzen не против :).
Вам тоже спасибо: пойду думать, кто и когда выставил мой signed.applets.codebase_principal_support в true.

Отсутствует

 

№1123-12-2009 08:54:14

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
UA: Firefox 3.5
Веб-сайт

Re: Помогите плиз адаптировать javascript: URL для FireFox

formatC'vt тоже не против :)
Не плохо было бы еще сам ресурс упомянуть, без него помощь не удалась бы.


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1223-12-2009 12:19:43

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

Еще раз большое спасибо ответившим. Пост на natahaus.info -

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Отредактировано Kramar (23-12-2009 12:22:44)

Отсутствует

 

№1324-12-2009 17:55:13

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Помогите плиз адаптировать javascript: URL для FireFox

Вариант, для которого требуется меньше привилегий:

Выделить код

Код:

javascript:
var newsbody = document.getElementsByClassName('newsbody')[0];
var title = newsbody.textContent;
var title = title.match(/^Автор:\xA0([^\n]*)$/m)[1] + ' - ' + title.match(/^Название:\xA0([^\n]*)$/m)[1];
var input = document.createElement("input");
input.setAttribute("contentEditable", "true");
input.setAttribute("value", title);
input = newsbody.appendChild(input);
input.focus();
input.setSelectionRange(0, title.length);
document.execCommand('Copy', false, true);
newsbody.removeChild(input);
void(0);

Как выдать привилегии — описано здесь. Можно также использовать расширение AllowClipboard Helper.

У такого букмарклета есть недостаток: после его вызова пропадает выделение текста (если оно было), пропадает фокус у полей ввода и пр. В принципе, с этим можно побороться.

Kramar, простите, я продублировал это сообщение на тамошнем форуме :).

Отсутствует

 

№1425-12-2009 23:27:56

Kramar
Участник
 
Группа: Members
Зарегистрирован: 12-12-2007
Сообщений: 19
UA: Firefox 3.5

Re: Помогите плиз адаптировать javascript: URL для FireFox

luitzen пишет

Kramar, простите, я продублировал это сообщение на тамошнем форуме :).

Почему это вдруг "простите", наоборот спасибо Вам за это, только там про привилегии слегка по-другому сказано.

Отредактировано Kramar (26-12-2009 00:28:50)

Отсутствует

 

№1521-05-2015 19:27:58

Timofejj
Участник
 
Группа: Members
Зарегистрирован: 10-04-2015
Сообщений: 13

Re: Помогите плиз адаптировать javascript: URL для FireFox

Доброго времени суток всем! Дабы не плодить темы, то решил написать здесь. Моему знакомому понадобилось расширение для Mozilla типа Disqus-Downvote-Exposer которое есть только на Chrome. Оно помогает получить возможность видеть кол-во "минусов" в постах disqus'а. Состоит только из одного примитивного JavaScript, которое я решил адаптировать под Greasemonkey. Всё бы нечего но в JavaScript пока не силён и видимо переоценил свои возможности. Если нетрудно помогите разобраться где что не так. Спасибо!

Выделить код

Код:

// ==UserScript==
// @name        Disqus-Downvote-Exposer
// @namespace   http://localhost
// @include     http://*.disqus.com/*
// @include     http://disqus.com/*
// @run-at      document-end
// @version     1.0
// ==/UserScript==

switch (window.location.hostname) {
case "disqus.com" & "*.disqus.com":

    setInterval(ShowDownvotes, 3000);

    function ShowDownvotes() {
        var downvotes = document.getElementsByClassName("vote-down");

        for (var i = 0; i < downvotes.length; i++) {
            var downvoteCount = downvotes[i].getElementsByClassName("downvote-count");

            if (downvoteCount.length === 0) {
                downvoteCount = document.createElement("span");
                downvoteCount.className = "downvote-count";
                downvoteCount.style.position = "relative";
                downvoteCount.style.top = "-3px";
                downvotes[i].insertBefore(downvoteCount, downvotes[i].firstChild);
            } else
                downvoteCount = downvoteCount[0];

            downvoteCount.innerHTML = downvotes[i].className.split(" ")[2].substring(6);

            if (downvoteCount.innerHTML == "0")
                downvoteCount.style.display = "none";
            else
                downvoteCount.style.display = "";
        }
    }
}

Отредактировано Timofejj (21-05-2015 19:55:11)

Отсутствует

 

№1621-05-2015 21:48:45

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 38.0

Re: Помогите плиз адаптировать javascript: URL для FireFox

Timofejj
Как минимум, лишнее обрамление:

Выделить код

Код:

switch (window.location.hostname) {
case "disqus.com" & "*.disqus.com":
    ...
}

К тому же «"disqus.com" & "*.disqus.com"» превратится в 0, & – это побитовое И, строки приведет к числам и попытается посчитать.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1722-05-2015 00:40:56

Timofejj
Участник
 
Группа: Members
Зарегистрирован: 10-04-2015
Сообщений: 13

Re: Помогите плиз адаптировать javascript: URL для FireFox

Infocatcher Огромное спасибо за отклик. Я сначала сам "дотункал" и всё таки "доканал", а потом зашёл сюда. Хотел коммент удалить, думал не кому ответить. Вот, рабочий вариант:

Выделить код

Код:

// ==UserScript==
// @name        Disqus Downvote Exposer
// @namespace   ShowDownvotes
// @author      Yunku Daniel Kang
// @description Это скрипт показывает количество отрицательных голосов в комментариях на Disqus
// @include     https://disqus.com/*
// @include     http://*.disqus.com/*
// @version     1.0
// @grant       none
// ==/UserScript==
setInterval(ShowDownvotes, 3000);
function ShowDownvotes() {
    var downvotes = document.getElementsByClassName("vote-down");
    for (var i = 0; i < downvotes.length; i++) {
        var downvoteCount = downvotes[i].getElementsByClassName("downvote-count");
        if (downvoteCount.length == 0) {
            downvoteCount = document.createElement("span");
            downvoteCount.className = "downvote-count";
            downvoteCount.style.position = "relative";
            downvoteCount.style.top = "-3px";
            downvotes[i].insertBefore(downvoteCount, downvotes[i].firstChild);
        } else
            downvoteCount = downvoteCount[0];
        downvoteCount.innerHTML = downvotes[i].className.split(" ")[2].substring(6);
        if (downvoteCount.innerHTML == "0")
            downvoteCount.style.display = "none";
        else
            downvoteCount.style.display = "";
    }
}

Первоначально было без того где ты описал мою ошибку. Потом начал "плутать" Дело в том что Greasemonkey очень "чуствителен" к заголовку юзер-скрипта. Scriptish в этом отношении получше. Потом через него адаптировал и на Greasemonkey. Благодарю!

Отредактировано Timofejj (22-05-2015 00:42:15)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]