اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
همانطور که در مقاله «آغاز کار با الکترون» گفتیم، فرآیند اصلی، تنها فرآیندی است که توانایی استفاده از گرافیک بومی
سیستم عامل را دارد. ولی بسیاری از اوقات نیاز است در سمت renderProcess
توانایی انجام این کارها را داشته باشیم. در این مقاله قصد داریم که همان
دیالوگهای open و save را از طریق Render Process اجرا نماییم.
الکترون برای اینکار از یک ماژول به نام remote استفاده میکند که وظیفه آن برقراری ارتباط IPC از Render Process به Main Process است و مواردی را که لازم است، در اختیار شما قرار میدهد. در این شیوه لازم نیست شما مرتبا به ارسال پیام بپردازید، بلکه این ارتباطات را ماژول remote فراهم میکند. این مورد شبیه به سیستم RMI در جاواست.
برای استفاده از remote در فایل html، کدهای زیر را در تگ اسکریپت اضافه میکنیم:
اینبار هم مانند قسمت قبلی، کدها را به شیوه دیگری انتساب دادیم. قصد ما از
تغییر این رویه این است که با انواع حالتهای انتساب اشیاء، آشنا شویم. بعد
از آن توابع زیر را اضافه میکنیم:
برای استفاده از این توابع، کدهای زیر را نیز به فایل اضافه میکنیم تا دکمههای open و save به صفحه اضافه شوند:
حالا برنامه را اجرا و تست کنید.
عبارت remote شامل متدهای فراوانی است که تعدادی از آنها را بر میشماریم:
شیء BrowserWindow صفحه جاری را باز میگرداند.
شیء webContents صفحه جاری را باز میگرداند.
این متد، دسترسی به شیء global را داراست و یکی از اشیاء ارتباطی بین Main
Process و RenderProcess است که میتواند هر نوع دادهای را جابجا نماید.
برای مشاهده بهتر از نحوه کارکرد این متد کد زیر را مشاهده نمایید:
Main Process
Render Process
از این پس هر موقع renderProcess به این کد برسد، پیام 1395 را روی صفحه نمایش خواهد داد.
شیء، process را از main process دریافت میکند و با کد زیر برابر است. ولی مزیت این متد این است که از کش نیز استفاده مینماید.
در مورد شیء 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'); }); }
<button onclick="OpenDialog();" > Open File</button> <button onclick="SaveDialog();" > Save File</button>
عبارت remote شامل متدهای فراوانی است که تعدادی از آنها را بر میشماریم:
remote.getCurrentWindow()
remote.getCurrentWebContents()
remote.getGlobal(name)
Main Process
global.testData={year:1395};
Render Process
alert(remote.getGlobal("testData").year);
remote.process
remote.getGlobal('process')
در مورد شیء process باید گفت که شامل خصوصیات و متدهایی در مورد پروسه اصلی اپلیکیشن میباشد. این اطلاعات مثل دریافت شماره نسخه الکترون، شماره نسخه کرومیوم، دریافت اطلاعات حافظه در مورد پروسه اپلیکیشن و حتی دریافت اطلاعات حافظه در مورد کل سیستم و ... میشود.