Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / -1 / 0
Регистрация: 27.04.2015
Сообщений: 5
1

Создание расширения для Firefox. Перевод расширений Chrome на Firefox

06.07.2017, 17:57. Просмотров 1419. Ответов 4
Метки нет (Все метки)

Здесь обсуждается процесс создания расширений для Mozilla Firefox, а также портинг из Chrome.

Добавлено через 17 минут
Товаращи разработчики, не являюсь веб-программистом (профиль .Net C#), но нужно напилить по работе расширение на FireFox. Оно уже есть написанное для Хрома, мне его нужно "просто" портировать в Firefox.

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

Пытался портировать с помощью Foxified расширения в FireFox'e, в итоге работает наполовину, от чего толку мало. Если же точно такой же код установить вручную, ничего не происходит кроме того, что в дополнениях появляется это дополнение. Но, если установщик (xpi) нужного расширения сохранить себе и установить его вручную, оно работает, неправильно, но работает. Открыв xpi обнаружил, что внутри бОльшая часть кода переведена в десятичную, это для чего то нужно?

Добавлено через 36 минут
Кроме того, есть ли знатоки, кто то может внятно объяснить принцип построения расширения? Без каких файлов оно не сможет работать и какая последовательность загрузки файлов запуске расширения? Думал, что без файла install.rdf приложение не может установиться, да вот после того как с помощью Foxified скачал портированное, увидел, что там этого файла нет в каталоге.

Помогите пожалуйста, уже несколько дней с этим вожусь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2017, 17:57
Ответы с готовыми решениями:

Создание расширения для FireFox
Доброго всем дня! Подскажите, может кто из вас писал расширения для FF? На...

Создание расширений для Chrome, Firefox
Доброе время суток. Не могли бы подсказать какими инструментами лучше разрабатывать расширения...

Пишем расширения к браузерам Chrome, Firefox и Opera (не 15+, которая с движком от хрома)
1. Что такое расширения к браузерам? Расширения к браузерам - это программы, которые внедряются в...

Создание расширений под IE,Firefox,Chrome...
Здравствуйте! Прошу сильно не ругаться (я начинающий,и совсем не гуру ). Задался целью создать...

4
114 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
08.07.2017, 14:47 2
Ну что могу сказать, последняя версия Firefoxa умеет работать с расширениями Chrome, читает файл манифест. Там нужны совсем небольшие правки, так как Firefox теперь полностью переходит на формат WebExtensions. То есть сейчас они там уже работают, если загружать манифест через панель отладки расширений. Расширение, с которым я работаю потребовало совсем не много правок. Так, например, нужна была функция:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getBrowser() {
    if ( typeof browser === "undefined"  ) {
        return chrome;
    } else {
        return browser;
    }
}
 
function getBrowserRuntime() {
    if ( typeof browser === "undefined"  ) {
        return chrome.extension;
    } else {
        return browser.runtime;
    }   
}
В таком случае стандартные вещи, вроде :

Javascript
1
chrome.onMessage
Станут
Javascript
1
getBrowserRuntime().onMessage
Там есть еще небольшие подводные камни, но они крайне небольшие, и, я думаю вы сможете с ними разобраться. Кстати, браузер Edge от MS тоже поддерживает такой тип расширений
0
0 / -1 / 0
Регистрация: 27.04.2015
Сообщений: 5
08.07.2017, 18:55  [ТС] 3
Спасибо, это я понимаю. Предыдущий конфликт я решил, тепер столкунулся с нежеланием FF принимать ajax запрос.

Можете подсказать что в данном случае неприемлемо для Firefox'a? На хроме это работает без проблем:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
function getValues(callback) {
console.log('getvalues');
console.log($);    
browser.runtime.sendMessage({
        method: 'getParams'
    }, function(response) {
        callback(JSON.parse(response.data));
    });
}
 
 
function setPageData(extValues) {
console.log('SETPAGEDATA');
    var resumes = document.getElementsByClassName('card');
    var numberTypes = /\d+/;
    var idArray = new Array();
    if (document.getElementsByTagName('nav').length == 1) {
        console.log('if (document.getElementsByTagName(nav).length == 1)');
        return;
    }
    for (i = 0; i < resumes.length; i++) {
        var resume = resumes[i].getElementsByTagName('a')[0];
        if (resume !== undefined) {
console.log('        if (resume !== undefined)');
            var href = resume.getAttribute('href');
            if (href !== null) {
console.log('        if (resume !== undefined)');
                var id = resume.getAttribute('href').match(numberTypes);
                if (id !== null) {
console.log('    if (id !== null)');
                    idArray.push(id[0]);
                }
            }
        }
    }
console.log(extValues.webServicePath);
console.log(extValues.Login);
console.log(idArray);
    $.ajax({
        type: 'POST',
    asyns: false, 
        contentType: 'application/json; charset=windows-1251',
        dataType: 'json',
        url: extValues.webServicePath,
        data: JSON.stringify({
            calcId: 'CANDIDATE.INWORKUA',
            args: JSON.stringify({
                form: {
                    ids: idArray,
                    userid: extValues.Login
                }
            }),
            ticket: ''
        }),
        success: function(data) {
console.log('success');
            var valuesIn = JSON.parse(data.d);
            for (i = 0; i < resumes.length; i++) {
                var resume = resumes[i].getElementsByTagName('a')[0];
                currentId = 0;
                if (resume !== undefined) {
console.log('success');
                    if(resume.getAttribute('role') == 'button') {
                        continue;
                    }
                    if(resume.getAttribute('id') == 'changeCat'){
                        continue;
                    }
                    var href = resume.getAttribute('href');
                    if (href !== null) {
                        var id = resume.getAttribute('href').match(numberTypes);
                        if (id !== null) {
                            currentId = id[0];
 
                        }
                    }
                }
                var node = resumes[i].getElementsByTagName('a')[0];
                if (node == undefined) {
                    continue;
                }
                var parentSpan = document.createElement('span');
                parentSpan.className = extValues.lblId;
                var span = document.createElement('span');
                if (valuesIn.IN.indexOf(currentId) !== -1) {
                    span.setAttribute('style', 'color:' + extValues.ProfileColor + ';font-size:small');
                    span.appendChild(document.createTextNode(extValues.ProfileIn));
console.log('if span.setAttribute, span.appendChild');
                } else {
                    span.setAttribute('style', 'color:' + extValues.AddColor + ';font-weight: bold;font-size:small');
                    span.appendChild(document.createTextNode(extValues.NotIn));
console.log('else span.setAttribute, span.appendChild');
                }
                var img = document.createElement('img');
console.log('image');
                //img.src = browser.extension.getURL(extValues.MainImage);
        img.setAttribute('src',browser.extension.getURL(extValues.MainImage));
console.log('img.src = browser.extension.getURL');
                var mainSpan = document.createElement('span');
                mainSpan.appendChild(document.createTextNode(extValues.lblId));
                mainSpan.setAttribute('style', 'color:' + extValues.MainColor + '; font-family:' + extValues.MainFont + ';font-weight: bold;font-size:medium');
 
                parentSpan.appendChild(span);
                parentSpan.appendChild(img);
                parentSpan.appendChild(mainSpan);
                parentSpan.appendChild(document.createElement('br'));
 
                node.insertBefore(parentSpan, node.firstChild);
console.log('  node.insertBefore(parentSpan, node.firstChild);')
            }
        },
error: console.log('****ing error');
 
    });
}
getValues(setPageData);
console.log('getValues');
0
114 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
09.07.2017, 01:10 4
На беглый взгляд ничего криминального не видно, кроме ошибки в строке 41. Там нужно async: false , а не asyns: false . Вроде как для ФФ в данном случае важный флаг.
1
0 / -1 / 0
Регистрация: 27.04.2015
Сообщений: 5
09.07.2017, 18:09  [ТС] 5
Да, спасибо, слово исправил, но проблема не в нем(
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2017, 18:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Добавление расширений к firefox
Доброго времени суток. Начну с небольшого вступления. Я занимаюсь GUI тестированием, использую...

Удаление повторяющихся элементов массива в коде расширения Copy All Links для Firefox
Друзья! Всё ли верно в этом коде? Он, я так понял, удаляет дубликаты из массива newArray ...

Что предложат Firefox и Chrome для Metro-интерфейса Windows 8?
Не может быть никаких сомнений в том, что и Firefox, и Chrome будут иметь версии для стартового...

Удаление расширения Антимат в firefox
Добрый день! История типичная, жена скачивала фильм и установила кучу сервисов от mail.ru Всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.