همانطور که در مقاله «
آغاز کار با الکترون» گفتیم، فرآیند اصلی، تنها فرآیندی است که توانایی استفاده از گرافیک بومی
سیستم عامل را دارد. ولی بسیاری از اوقات نیاز است در سمت renderProcess
توانایی انجام این کارها را داشته باشیم. در این مقاله قصد داریم که همان
دیالوگهای open و save را از طریق Render Process اجرا نماییم.
الکترون برای اینکار از یک ماژول به نام remote استفاده میکند که وظیفه آن
برقراری ارتباط IPC از Render Process به Main Process است و مواردی را که لازم است، در اختیار شما قرار میدهد. در این شیوه لازم نیست شما مرتبا به ارسال
پیام بپردازید، بلکه این ارتباطات را ماژول remote فراهم میکند. این مورد
شبیه به سیستم
RMI در جاواست.
برای استفاده از remote در فایل html، کدهای زیر را در تگ اسکریپت اضافه میکنیم:
const remote=require("electron").remote;
const dialog=remote.dialog;
اینبار هم مانند قسمت قبلی، کدها را به شیوه دیگری انتساب دادیم. قصد ما از
تغییر این رویه این است که با انواع حالتهای انتساب اشیاء، آشنا شویم. بعد
از آن توابع زیر را اضافه میکنیم:
function OpenDialog()
{
dialog.showOpenDialog({
title:'باز کردن فایل متنی',
properties: [ 'openFile']//[ 'openFile', 'openDirectory', 'multiSelections' ]
,filters:[
{name:'فایلهای نوشتاری' , extensions:['txt','text']},
{name:'جهت تست' , extensions:['doc','docx']}
]
},
(filename)=>{
if(filename===undefined)
return;
var content= fs.readFileSync(String(filename),'utf8');
document.getElementById("TextFile").value=content;
});
}
function SaveDialog()
{
dialog.showSaveDialog({
title:'باز کردن فایل متنی',
properties: [ 'openFile']//[ 'openFile', 'openDirectory', 'multiSelections' ]
,filters:[
{name:'فایلهای نوشتاری' , extensions:['txt','text']}
]
},
(filename)=>{
if(filename===undefined)
return;
var content=document.getElementById("TextFile").value;
fs.writeFileSync(String(filename),content,'utf8');
});
}
برای استفاده از این توابع، کدهای زیر را نیز به فایل اضافه میکنیم تا دکمههای open و save به صفحه اضافه شوند:
<button onclick="OpenDialog();" > Open File</button>
<button onclick="SaveDialog();" > Save File</button>
حالا برنامه را اجرا و تست کنید.
عبارت remote شامل متدهای فراوانی است که تعدادی از آنها را بر میشماریم:
remote.getCurrentWindow()
شیء BrowserWindow صفحه جاری را باز میگرداند.
remote.getCurrentWebContents()
شیء webContents صفحه جاری را باز میگرداند.
این متد، دسترسی به شیء global را داراست و یکی از اشیاء ارتباطی بین Main
Process و RenderProcess است که میتواند هر نوع دادهای را جابجا نماید.
برای مشاهده بهتر از نحوه کارکرد این متد کد زیر را مشاهده نمایید:
Main Process global.testData={year:1395};
Render Process alert(remote.getGlobal("testData").year);
از این پس هر موقع renderProcess به این کد برسد، پیام 1395 را روی صفحه نمایش خواهد داد.
شیء، process را از main process دریافت میکند و با کد زیر برابر است. ولی مزیت این متد این است که از کش نیز استفاده مینماید.
remote.getGlobal('process')
در مورد شیء process باید گفت که شامل خصوصیات و متدهایی در مورد پروسه اصلی
اپلیکیشن میباشد. این اطلاعات مثل دریافت شماره نسخه الکترون، شماره نسخه
کرومیوم، دریافت اطلاعات حافظه در مورد پروسه اپلیکیشن و حتی دریافت
اطلاعات حافظه در مورد کل سیستم و ... میشود.