افزونه نویسی برای مرورگرها : قسمت دوم : فایرفاکس
نویسنده: علی یگانه مقدم
تاریخ: ۱۳۹۳/۱۱/۱۵ ۱۰:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
var ss = require("sdk/simple-storage");
ss.storage.myArray = [1, 1, 2, 3, 5, 8, 13];
ss.storage.myBoolean = true;
ss.storage.myNull = null;
ss.storage.myNumber = 3.1337;
ss.storage.myObject = { a: "foo", b: { c: true }, d: null };
ss.storage.myString = "O frabjous day!"; delete ss.storage.value;
if (!ss.storage.Variables)
{
ss.storage.Variables=[];
ss.storage.Variables.push(true);
ss.storage.Variables.push(false);
ss.storage.Variables.push(false);
ss.storage.Variables.push(false);
}
if (!ss.storage.interval)
ss.storage.interval=1;
if (!ss.storage.DateVariables)
{
var now=String(new Date());
ss.storage.DateVariables=[];
ss.storage.DateVariables.push(now);
ss.storage.DateVariables.push(now);
ss.storage.DateVariables.push(now);
ss.storage.DateVariables.push(now);
} contentScriptFile: self.data.url("jquery.min.js")
contentScriptFile: [self.data.url("jquery.min.js"),self.data.url("const.js"),self.data.url("popup.js")] function handleChange(state) {
if (state.checked) {
panel.show({
position: button
});
var v1=[],v2;
if (ss.storage.Variables)
v1=ss.storage.Variables;
if (ss.storage.interval)
v2=ss.storage.interval;
panel.port.emit("vars",v1,v2);
}
}
panel.port.on("vars", function (vars,interval) {
ss.storage.Variables=vars;
ss.storage.interval=interval;
}); $(document).ready(function () {
addon.port.on("vars", function(vars,interval) {
if (vars)
{
$("#chkarticles").attr("checked", vars[0]);
$("#chkarticlescomments").attr("checked", vars[1]);
$("#chkshares").attr("checked", vars[2]);
$("#chksharescomments").attr("checked", vars[3]);
}
$("#interval").val(interval);
});
$("#btnsave").click(function() {
var Vposts = $("#chkarticles").is(':checked');
var VpostsComments = $("#chkarticlescomments").is(':checked');
var Vshares = $("#chkshares").is(':checked');
var VsharesComments = $("#chksharescomments").is(':checked');
var Vinterval = $("#interval").val() ;
var Variables=[];
Variables[0]=Vposts;
Variables[1]=VpostsComments;
Variables[2]=Vshares;
Variables[3]=VsharesComments;
interval=Vinterval;
addon.port.emit("vars", Variables,Vinterval);
$("#messageboard").text( Messages.SettingsSaved);
});
}); نکته بسیار مهم: در کد بالا ما فایل جاوااسکریت را از طریق فایل popup.html معرفی کردیم، نه از طریق خصوصیت contentscriptfile. این نکته را همیشه به خاطر داشته باشید. فایلهای js خود را تنها در دو حالت استفاده کنید:
اگر فایل شما شامل استفاده از کلمهی کلیدی addon نمیشود، میتوانید فایل js خود را از طریق contentScriptFile هم اعمال کنید.
فایل popup.html
<script src="jquery.min.js"></script> <!-- Including jQuery --> <script type="text/javascript" src="const.js"></script> <script type="text/javascript" src="popup.js"></script>
<script type="text/javascript" src="const.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="rssreader.js"></script> pageWorker = require("sdk/page-worker");
page= pageWorker.Page({
contentScriptWhen: "ready",
contentURL: self.data.url("./background.htm")
});
page.port.emit("vars",ss.storage.Variables,ss.storage.DateVariables,ss.storage.interval); var variables=[];
var datevariables=[];
var period_time=60000;
var timer;
google.load("feeds", "1");
$(document).ready(function () {
addon.port.on("vars", function(vars,datevars,interval) {
if (vars)
{
Variables=vars;
}
if (datevars)
{
datevariables=datevars;
}
if(interval)
period_time=interval*60000;
alarmManager();
});
});
function alarmManager()
{
timer = setInterval(Run,period_time);
}
function Run() {
if(Variables[0]){RssReader(Links.postUrl,0, Messages.PostsUpdated);}
if(Variables[1]){RssReader(Links.posts_commentsUrl,1,Messages.CommentsUpdated); }
if(Variables[2]){RssReader(Links.sharesUrl,2,Messages.SharesUpdated);}
if(Variables[3]){RssReader(Links.shares_CommentsUrl,3,Messages.SharesCommentsUpdated);}
}
function RssReader(URL,index,Message) {
var feed = new google.feeds.Feed(URL);
feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
feed.load(function (result) {
if(result!=null)
{
var strRssUpdate = result.xmlDocument.firstChild.firstChild.childNodes[5].textContent;
var RssUpdate=new Date(strRssUpdate);
var lastupdate=new Date(datevariables[index]);
if(RssUpdate>lastupdate)
{
datevariables[index]=strRssUpdate;
addon.port.emit("notification",datevariables,Message);
}
}
});
} page.port.on("notification",function(lastupdate,Message)
{
ss.storage.DateVariables=lastupdate;
Make_a_Notification(Message);
})
function Make_a_Notification(Message)
{
var notifications = require("sdk/notifications");
notifications.notify({
title: "سایت به روز شد",
text: Message,
iconURL:self.data.url("./icon-64.png"),
data:"https://www.dntips.ir",
onClick: function (data) {
tabs.open(data);
}
});
}
pageWorker = require("sdk/page-worker");
page= pageWorker.Page({
contentScriptWhen: "ready",
contentURL: self.data.url("./background.htm")
});
function SendData()
{
page.port.emit("vars",ss.storage.Variables,ss.storage.DateVariables,ss.storage.interval);
}
SendData();
panel.port.on("vars", function (vars,interval) {
ss.storage.Variables=vars;
ss.storage.interval=interval;
SendData();
}); var timer;
function alarmManager()
{
timer = setInterval(Run,period_time);
}
addon.port.on("vars", function(vars,datevars,interval) {
if (vars)
{
Variables=vars;
}
if (datevars)
{
datevariables=datevars;
}
if(interval)
period_time=interval*60000;
if(timer!=null)
{
clearInterval(timer);
}
alarmManager();
}); var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.mozilla.org",
contentScript: 'window.alert("Page matches ruleset");'
}); var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.mozilla.org",
contentScriptFile: [data.url("jquery-1.7.min.js"),
data.url("my-script.js")]
}); "preferences": [{
"description": "مطالب سایت",
"type": "bool",
"name": "post",
"value": true,
"title": "مطالب سایت"
},
{
"description": "نظرات مطالب سایت",
"type": "bool",
"name": "postcomments",
"value": false,
"title": "نظرات مطالب سایت"
},
{
"description": "اشتراک ها",
"type": "bool",
"name": "shares",
"value": false,
"title": "اشتراک ها"
},
{
"description": "نظرات اشتراک ها",
"type": "bool",
"name": "sharescomments",
"value": false,
"title": "نظرات اشتراک ها"
},
{
"description": "دوره زمان برای بررسی سایت",
"name": "interval",
"type": "integer",
"value": 10,
"title": "دوره زمانی"
}]
از آنجا که مقادیر بالا تنها مقادیر پیش فرض خودمان هست و اگر کاربر آنها را تغییر دهد، در این صفحه هم باید اطلاعات تصحیح شوند، برای همین از کد زیر برای دسترسی به پنل تنظیمات و کنترلهای موجود آن استفاده میکنیم. همانطور که میبینید کد مورد نظر را در یک تابع به نام Perf_Default_Value قرار دادیم و آن را در بدو اجرا صدا زدیم. پس کاربر اگر به پنل تنظمیات رجوع کند، میتواند تغییراتی را که قبلا داده است، ببیند. بنابراین اگر الان تغییری را ایجاد کند، تا باز شدن مجدد مرورگر چیزی نمایش داده نمیشود. برای همین دقیقا مانند تابع SendData این تابع را هم در کد شنود پنل panel اضافه میکنیم؛ تا اگر کاربر اطلاعات را از طریق روش قبلی تغییر داد، اطلاعات هم اینک به روز شوند.
function Perf_Default_Value()
{
var preferences = require("sdk/simple-prefs").prefs;
preferences.post = ss.storage.Variables[0];
preferences.postcomments = ss.storage.Variables[1];
preferences.shares = ss.storage.Variables[2];
preferences.sharescomments = ss.storage.Variables[3];
preferences["myinterval"] =parseInt(ss.storage.interval);
}
Perf_Default_Value();
panel.port.on("vars", function (vars,interval) {
ss.storage.Variables=vars;
ss.storage.interval=interval;
SendData();
Perf_Default_Value();
}); perf=require("sdk/simple-prefs");
var preferences = perf.prefs;
function onPrefChange(prefName) {
switch(prefName)
{
case "post":
ss.storage.Variables[0]=preferences[prefName];
break;
case "postcomments":
ss.storage.Variables[1]=preferences[prefName];
break;
case "shares":
ss.storage.Variables[2]=preferences[prefName];
break;
case "sharescomments":
ss.storage.Variables[3]=preferences[prefName];
break;
case "myinterval":
ss.storage.interval=preferences[prefName];
break;
}
}
//perf.on("post", onPrefChange);
//perf.on("postcomments", onPrefChange);
perf.on("", onPrefChange); chrome.storage.local.set chrome.storage.sync.set
My simpleAddon could not be verified for use in firefox. proceed with caution