نمایش وب gui/webview
پنجرهای بومی دور HTML، و روی آن یک لایهی کامل برای برنامهی رومیزی.
واردسازی رابط گرافیکی.نمایش وب
- نمایش دادهای که برنامه حساب کرده
- رساندن دادهی ساختیافته به صفحه
- باز کردن یک سایت یا سرور محلی
- برنامهای با یک صفحه و یک فرمان
- فرمان، خطا و کار کند
- پنجره، رویداد و منو
- پنجرهی گفتگو، اعلان، راز و سینی
- پنجرهای دور یک وبسایت
- ساختن نصبکننده
- وقتی چیزی کار نمیکند
- انتخاب موتور وب
- گونهها
- پایاها و متغیرها
- تابعها
این بسته پنجرهای بومی روی میزکار دور HTML باز میکند و روی همین پایه یک برنامهی کامل میزکار میسازد؛ همان چیزی که با Tauri یا Electron ساخته میشود، ولی بدون Rust و بدون زبان دوم. در این یک بسته دو سطح هست. سطح پایین یک پنجرهی کوچک است: آن را میسازید، با تنظیم اچ تی ام ال یا پیمایش صفحهای نشان میدهید و اجرا آن را تا وقتی کاربر ببندد باز نگه میدارد. سطح برنامه با آغاز شروع میشود و فرمانهایی که صفحه صدا میزند، رویداد در دو جهت، پروندههای بستهشده، پنجرهی گفتگو، اعلان، کلیددان، نماد سینی، منو، قفل تکنمونه و نصبکنندههایی را که salam bundle میسازد اضافه میکند.
رابط کاربری HTML و CSS و جاوااسکریپت است. بهطور پیشفرض در وبویویی اجرا میشود که خود سیستمعامل دارد، مثل Tauri: WebView2 در ویندوز، WKWebView در مک و WebKitGTK در لینوکس؛ پس برنامهی شما یک پروندهی اجرایی کوچک بومی میماند. موتور هنگام ساختن برنامه انتخاب میشود؛ برای گزینهی کرومیوم انتخاب موتور وب را ببینید.
صفحه با salam.invoke کد سلام شما را فراخوانی میکند و یک وعده برمیگرداند. صفحهها میتوانند از سه جا بیایند: پروندههایی که درون برنامه بسته شدهاند و در هیچ پوشهای در دسترس کاربر نیستند، یک سایت بیرونی، یا یک رشتهی HTML. برای یک ابزار کوچک میزکار، نمایش دادهای که برنامه حساب کرده یا پنجرهای بومی دور رابط وبی که برنامهی خودتان ارائه میکند به کار میآید. برای صفحههایی که در مرورگر خود کاربر اجرا میشوند به dom سر بزنید و برای ساختن HTML به template.
داده چطور جابهجا میشود و چه چیزی کار نمیکند
- داده را در خود صفحه بگذارید. راه مطمئن رساندن داده به صفحه این است که آن را به شکل JSON درون یک
<script>در همان HTML بنویسید که بهتنظیم اچ تی ام المیدهید. اولیهسازیاسکریپتی برای همهی صفحههای بعدی نصب میکند که پیش از اسکریپتهای خود صفحه اجرا میشود.ارزیابییک بار روی صفحهی همان لحظه اجرا میشود.- صفحهها در پسزمینه بارگذاری میشوند، پس کدی که با
ارزیابیدرست پس ازتنظیم اچ تی ام الیاپیمایشبفرستید ممکن است پیش از صفحهی تازه اجرا شود. ازاولیهسازیاستفاده کنید یا منتظرهنگام بارگذاریبمانید. ایجادشکست را با برگرداندن پنجرهای که از همان اول بسته است گزارش میدهد؛ درست پس از آنبسته شده استرا بسنجید، مثلا روی سرور لینوکسی که نمایشگر ندارد.- صفحه میتواند با
هنگام پیامجواب بدهد. برای یک برنامهی کامل با فرمان، رویداد، پروندههای بستهشده و نصبکننده از تابعهای سطح برنامه مثلآغاز،فرمانوباز کردناستفاده کنید که در راهنماهای پایینتر آمدهاند.
صفحهها چه اجازهای دارند
- صفحههای محلی همهی فرمانها را میتوانند اجرا کنند. سایتهای بیرونی تا وقتی با
اجازه دادننامشان را نبرید به هیچ چیز دسترسی ندارند و میتوانید فرمان به فرمان اجازه بدهید. - پل ارتباطی فقط در قاب اصلی یک مبدا مجاز وجود دارد و هر پیام رازی دارد که برای همین اجرا ساخته شده است، پس قاب یا سایت دیگر نمیتواند شما را فراخوانی کند. پاسخها مبدای خود را همراه دارند و به صفحهای که جای آن آمده نمیرسند.
- پیوند به هر سایت دیگر در مرورگر سیستم باز میشود. در لینوکس موتور مرورگر قاب را از صفحه تشخیص نمیدهد، پس مبدای قاب بیرونی باید در
پیمایش مجازبیاید. - پروندههای درون برنامه فشرده و درهم میشوند و از دید کاربر پنهان میمانند، ولی محرمانه نیستند: هرچه صفحه بتواند بخواند، کاربر پیگیر هم میتواند بیرون بکشد. رازهای واقعی را روی سرور نگه دارید.
پنجره به نشست میزکار نیاز دارد، پس سایت این برنامهها را فقط کامپایل میکند؛ آنها را روی ماشین خودتان با salam run اجرا کنید. در لینوکس اول libgtk-3-dev و libwebkit2gtk-4.1-dev (WebKitGTK 4.1) را نصب کنید. ویندوز ۱۰ و ۱۱ خودشان WebView2 دارند و مک هم WKWebView. ساخت برای سیستم دیگر چیزی بیشتر نمیخواهد و --target از هر دستگاهی کار میکند.
نمایش دادهای که برنامه حساب کرده
سادهترین برنامهی میزکار یک رشتهی HTML میسازد و نشانش میدهد. هر چه صفحه لازم دارد، حتی برگهی سبک، میتواند در همان یک رشته باشد؛ پس هیچ فایلی لازم نیست کنار برنامهی اجرایی پخش شود. اشاره ثابت پنجره را در اندازهای که خواستهاید نگه میدارد که برای پنجرهی کوچکی مثل این خلاصهی سفارش مناسب است.
واردسازی رابط گرافیکی.نمایش وب
واردسازی رشته
ساختار کالا:
همگانی نام: رشته = ""
همگانی تعداد: صحیح = ۰
همگانی بها: صحیح = ۰
پایان
تابع صفحه سفارش(کالاها: وکتور<کالا>): رشته:
ناپایا ردیف ها := ""
ناپایا جمع کل := ۰
هر ک در کالاها:
مبلغ := ک.تعداد * ک.بها
جمع کل += مبلغ
ردیف ها = ردیف ها + "<tr><td>" + ک.نام + "</td><td>" + رشته.از عدد(ک.تعداد) + "</td><td>" + رشته.از عدد(مبلغ) + "</td></tr>"
پایان
سبک := "body{font-family:sans-serif;margin:2em;direction:rtl}td,th{padding:4px 12px;text-align:right}"
برگشت "<style>" + سبک + "</style><h1>سفارش</h1><table><tr><th>کالا</th><th>تعداد</th><th>مبلغ</th></tr>" + ردیف ها + "</table><p>جمع کل: " + رشته.از عدد(جمع کل) + "</p>"
پایان
تابع ریشه:
ناپایا کالاها := وکتور {} برگردان وکتور<کالا>
کالاها.بیفزا(کالا { نام = "چای"، تعداد = ۲، بها = ۴۵ })
کالاها.بیفزا(کالا { نام = "کیک"، تعداد = ۱، بها = ۱۲۰ })
ناپایا پنجره := نمایش وب.ایجاد()
پنجره.تنظیم عنوان("سفارش")
پنجره.تنظیم اندازه(۴۸۰، ۳۲۰، نمایش وب.اشاره ثابت)
پنجره.تنظیم اچ تی ام ال(صفحه سفارش(کالاها))
پنجره.اجرا()
پنجره.نابود کردن()
پایاننام کالاها همانطور که هستند در HTML میروند. وقتی متن از کاربر یا از یک فایل میآید، اول آن را از گریز اچ تی ام ال در بستهی قالب بگذرانید، وگرنه نامی که < دارد صفحه را خراب میکند.
رساندن دادهی ساختیافته به صفحه
برای هر چیزی بزرگتر از یک جدول، بگذارید جاوااسکریپت صفحه را بکشد و داده را به شکل JSON به آن بدهید. سریال سازی از encoding/json وکتوری از ساختارها را به آرایهی JSON تبدیل میکند که کلیدهایش نام فیلدها هستند (در سلام فارسی همان نامهای فارسی)، و این متن مستقیم درون یک <script> در صفحه میرود. اسکریپت هنگام بار شدن صفحه اجرا میشود، پس داده پیش از کشیده شدن هر چیزی آماده است.
واردسازی رابط گرافیکی.نمایش وب
واردسازی کدگذاری.جیسون
ساختار کار:
همگانی عنوان: رشته = ""
همگانی انجام: منطقی = نادرست
پایان
تابع ریشه:
ناپایا کارها := وکتور {} برگردان وکتور<کار>
کارها.بیفزا(کار { عنوان = "نوشتن گزارش"، انجام = درست })
کارها.بیفزا(کار { عنوان = "فرستادن آن برای سارا" })
کارها.بیفزا(کار { عنوان = "رزرو اتاق جلسه" })
صفحه := `<div dir="rtl">
<h2 id="count"></h2>
<ul id="list"></ul>
</div>
<script>
const tasks = ` + جیسون.سریال سازی(کارها) + `;
const open = tasks.filter(t => !t.انجام).length;
document.getElementById("count").textContent = open + " از " + tasks.length + " کار مانده است";
for (const t of tasks) {
const li = document.createElement("li");
li.textContent = (t.انجام ? "[x] " : "[ ] ") + t.عنوان;
document.getElementById("list").appendChild(li);
}
</script>`
ناپایا پنجره := نمایش وب.ایجاد(نادرست)
پنجره.تنظیم عنوان("کارها")
پنجره.تنظیم اندازه(۴۰۰، ۳۰۰، نمایش وب.بدون اشاره)
پنجره.تنظیم اچ تی ام ال(صفحه)
پنجره.اجرا()
پنجره.نابود کردن()
پایانJSON خودش جاوااسکریپت درستی است، پس گام تجزیه لازم نیست. یک احتیاط: اگر مقداری ممکن است متن </script> را داشته باشد، اسکریپت را زودتر از موعد میبندد؛ وقتی داده از کاربر میآید، پیش از گذاشتن JSON در صفحه </ را با <\/ جایگزین کنید.
باز کردن یک سایت یا سرور محلی
پیمایش به جای رشته یک نشانی را بار میکند، پس پنجره میتواند سایتی بیرونی یا رابط وبی را نشان دهد که برنامهی خودتان روی 127.0.0.1 ارائه میکند. این برنامه نشانی را از خط فرمان میگیرد، پس salam run webview-guide-launch.salam http://127.0.0.1:8000 یک سرور توسعهی محلی را در پنجرهای بومی میگذارد.
واردسازی رابط گرافیکی.نمایش وب
واردسازی سیستم عامل
تابع ریشه:
آرگ ها := سیستم عامل.آرگومان ها()
ناپایا نشانی := "https://www.salamlang.ir/"
اگر آرگ ها.طول() > ۱:
نشانی = آرگ ها.بگیر(۱)
پایان
ناپایا پنجره := نمایش وب.ایجاد()
پنجره.تنظیم عنوان(نشانی)
پنجره.تنظیم اندازه(۱۲۸۰، ۸۰۰، نمایش وب.بدون اشاره)
پنجره.پیمایش(نشانی)
پنجره.اجرا()
اگر پنجره.بسته شده است():
سرچاپ "پنجره بسته شد"
پایان
پنجره.نابود کردن()
پایاناجرا تا وقتی کاربر پنجره را ببندد منتظر میماند؛ خطهای پس از آن جای ذخیرهی وضعیت و جمع و جور کردن است. در هر حال یک بار در پایان نابود کردن را صدا بزنید. پایان دادن باعث میشود اجرا در نوبت بعدیاش برگردد؛ در لینوکس و ویندوز این نوبت فقط با رویداد بعدی پنجره، مثلا حرکت موشواره، میرسد. در مک به جای آن کل برنامه را میبندد، پس خطهای پس از اجرا آنجا اجرا نمیشوند.
برنامهای با یک صفحه و یک فرمان
در زمان توسعه پوشه دارایی ها پوشهی شما را مستقیم میدهد و با بارگذاری دوباره تغییرات دیده میشوند. بدون آن پروندههای درون برنامه به کار میروند.
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
نمایش وب.فرمان("greet"، (ف: نمایش وب.فراخوان):
ف.پاسخ متنی("سلام " + ف.متن("name"))
پایان)
نمایش وب.هنگام رویداد("ready"، (_داده: رشته):
نمایش وب.رویداد فرستادن("saved"، `{"count":1}`)
پایان)
پنجره := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { عنوان = "یادداشت"، پهنا = ۹۰۰، بلندی = ۶۰۰ })
اگر پنجره.بسته شده است():
سرچاپ "پنجره باز نشد"
برگشت ۱
پایان
نمایش وب.اجرا()
پایانصفحه آن را مانند هر تابع ناهمگام دیگری فراخوانی میکند:
const text = await salam.invoke("greet", { name: "سارا" });
const stop = salam.listen("saved", (data) => console.log(data));
salam.emit("ready", {});
فرمان معمولا در رشتهی رابط اجرا میشود، پس کوتاه نگهش دارید. کار طولانی را با فرمان ناهمگام ثبت کنید؛ صفحه روان میماند و پاسخ از رشتهی کارگر امن است.
فرمان، خطا و کار کند
آرگومانها به شکل جیسون میرسند. متن، عدد و درستی هر کدام یکی را با نامش میخوانند و دارد میگوید صفحه آن را فرستاده است یا نه. هر فراخوان را دقیقا یک بار تمام کنید: با یکی از روشهای پاسخ یا با رد که وعدهی صفحه را با پیام شما خطادار میکند. پاسخ دوم نادیده گرفته میشود.
فرمان در رشتهی رابط اجرا میشود، پس فرمان کند پنجره را میخشکاند. آن را با فرمان ناهمگام ثبت کنید تا روی رشتهی کارگر اجرا شود و پاسخ را بعدا هم بتوانید صدا بزنید. هر کار روی پنجره باید در رشتهی رابط باشد، پس رشتهی کارگر آن را به ارسال به رشته رابط میدهد.
واردسازی رابط گرافیکی.نمایش وب
واردسازی کدگذاری.جیسون
واردسازی همگام سازی
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
نمایش وب.فرمان("add"، (ف: نمایش وب.فراخوان):
اگر وارونه ف.دارد("a") یا وارونه ف.دارد("b"):
ف.رد("a و b لازم است")
برگشت
پایان
ف.پاسخ عددی(ف.عدد("a") + ف.عدد("b"))
پایان)
نمایش وب.فرمان ناهمگام("report"، (ف: نمایش وب.فراخوان):
نام := ف.متن("name")
همگام سازی.خواب میلی ثانیه(۱۵۰۰)
ف.پاسخ(`{"name":` + `"` + جیسون.اسکیپ(نام) + `"` + `,"pages":12}`)
پایان)
نمایش وب.هنگام رویداد("save"، (داده: رشته):
نمایش وب.ارسال به رشته رابط(():
نمایش وب.رویداد فرستادن("saved"، داده)
پایان)
پایان)
پنجره := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { عنوان = "یادداشت"، پهنا = ۹۰۰، بلندی = ۶۰۰ })
اگر پنجره.بسته شده است():
سرچاپ نمایش وب.آخرین خطا()
برگشت ۱
پایان
نمایش وب.اجرا()
پایانtry {
const sum = await salam.invoke("add", { a: 40, b: 2 });
const report = await salam.invoke("report", { name: "اسفند" });
} catch (e) {
console.log(e.message);
}
پنجره، رویداد و منو
باز کردن را چند بار میتوانید صدا بزنید. به هر پنجره یک برچسب بدهید و با گرفتن پنجره دوباره پیدایش کنید. رویداد فرستادن روی پنجره فقط به همان پنجره میرسد و روی بستهی برنامه رومیزی به همه. هنگام بستن وقتی کاربر پنجره را میبندد اجرا میشود: نادرست برگردانید تا پنجره بماند؛ جای مناسبی برای پرسیدن دربارهی کار ذخیرهنشده.
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
پنجره اصلی := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { برچسب = "main"، عنوان = "یادداشت"، پهنا = ۹۰۰، بلندی = ۶۰۰، کمترین پهنا = ۴۸۰، کمترین بلندی = ۳۲۰ })
پنجره اصلی.هنگام بستن(():
برگشت نمایش وب.تایید("یادداشت"، "پنجرهی یادداشت بسته شود؟")
پایان)
پنجره اصلی.هنگام تغییر اندازه((پ: صحیح، ب: صحیح):
سرچاپ "اندازه"، پ، ب
پایان)
نمایش وب.فرمان("open_help"، (ف: نمایش وب.فراخوان):
راهنما := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { برچسب = "help"، عنوان = "راهنما"، پهنا = ۵۲۰، بلندی = ۴۲۰، اچ تی ام ال = "<h1>راهنما</h1>" })
راهنما.رویداد فرستادن("hello"، `{"from":"main"}`)
ف.پاسخ خالی()
پایان)
نمایش وب.هنگام منو((شناسه: رشته):
اگر شناسه برابر "help":
نمایش وب.گرفتن پنجره("main").رویداد فرستادن("menu"، `"help"`)
پایان
اگر شناسه برابر "quit":
نمایش وب.خروج()
پایان
پایان)
ناپایا موردها := وکتور {} برگردان وکتور<نمایش وب.موردمنو>
موردها.بیفزا(نمایش وب.مورد("help"، "راهنما"))
موردها.بیفزا(نمایش وب.خط جداکننده())
موردها.بیفزا(نمایش وب.مورد("quit"، "خروج"))
نمایش وب.تنظیم منو(پنجره اصلی، موردها)
نمایش وب.اجرا()
پایانمنو فهرستی از موردهاست که با مورد، خط جداکننده و زیرمنوی تازه ساخته میشود. هر کلیک، از هر منویی، با شناسهی مورد به هنگام منو میرسد.
پنجرهی گفتگو، اعلان، راز و سینی
این فراخوانها از هر چه سیستم دارد استفاده میکنند، پس یک برنامه روی هر سیستم بومی رفتار میکند. پنجرهی انتخاب پرونده اگر کاربر انصراف دهد متن خالی برمیگرداند. ذخیره راز و خواندن راز مقدار کوچکی مثل نشانهی ورود را به جای یک پرونده در پوشهی داده، در دستهکلید سیستم نگه میدارند. نمونه یکتا اگر برنامه از پیش اجرا باشد نادرست برمیگرداند و نسخهی در حال اجرا ورودیهای تازه را در تابع خود میگیرد.
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
پنجره := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { عنوان = "یادداشت" })
ماندن := نمایش وب.نمونه یکتا((ورودیها: وکتور<رشته>):
سرچاپ "اجرای دوم با"، ورودیها.طول()، "ورودی"
نمایش وب.گرفتن پنجره("main").تمرکز()
پایان)
اگر وارونه ماندن:
برگشت ۰
پایان
نمایش وب.فرمان("choose_folder"، (ف: نمایش وب.فراخوان):
ف.پاسخ متنی(نمایش وب.انتخاب پوشه("پوشه را انتخاب کنید"))
پایان)
نمایش وب.فرمان("sign_in"، (ف: نمایش وب.فراخوان):
موفق := نمایش وب.ذخیره راز("token"، ف.متن("token"))
ف.پاسخ درستی(موفق)
پایان)
نمایش وب.فرمان("token"، (ف: نمایش وب.فراخوان):
ف.پاسخ متنی(نمایش وب.خواندن راز("token"))
پایان)
نمایش وب.فرمان("done"، (ف: نمایش وب.فراخوان):
نمایش وب.اعلان("یادداشت"، "خروجی شما آماده است")
نمایش وب.درخواست توجه(پنجره)
ف.پاسخ خالی()
پایان)
نمایش وب.هنگام کلیک سینی(():
پنجره.نمایش()
پنجره.تمرکز()
پایان)
ناپایا سینی := وکتور {} برگردان وکتور<نمایش وب.موردمنو>
سینی.بیفزا(نمایش وب.مورد("quit"، "خروج"))
نمایش وب.تنظیم سینی("icon.png"، "یادداشت"، سینی)
نمایش وب.اجرا()
پایانیادتان باشد صفحه فقط فرمانی را که اجازه دارد میتواند صدا بزند. صفحههای محلی همه را میتوانند. اگر سایتی دور را بار میکنید، فرمانهای خطرناک مثل choose_folder بالا را فقط برای مبداهایی که به آنها اعتماد دارید فهرست کنید.
پنجرهای دور یک وبسایت
به نشانی آدرسی بدهید تا سایتی را که دارید در پنجره بگذارید و با اجازه دادن به همان یک سایت دسترسی به فرمانهای دلخواه بدهید. صفحهی خطای محلی میتواند در داراییها بماند.
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.portal"، نام = "درگاه" })
ناپایا مجازها := وکتور {} برگردان وکتور<رشته>
مجازها.بیفزا("pick_folder")
نمایش وب.اجازه دادن("https://app.example.com"، مجازها)
نمایش وب.فرمان("pick_folder"، (ف: نمایش وب.فراخوان):
ف.پاسخ متنی(نمایش وب.انتخاب پوشه("پوشه را انتخاب کنید"))
پایان)
پنجره := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { عنوان = "درگاه"، نشانی = "https://app.example.com/" })
پنجره.هنگام از کار افتادن((): پنجره.پیمایش(نمایش وب.نشانی دارایی("/error.html")) پایان)
نمایش وب.اجرا()
پایانساختن نصبکننده
برنامه را در salam.toml توصیف کنید و salam bundle را اجرا کنید. همین فرمان با --target از هر سیستمی کار میکند و پوشهی داراییها درون برنامه قرار میگیرد.
[app]
id = "com.example.notes"
name = "یادداشت"
version = "1.0.0"
assets = "www"
icon = "icon.png"
description = "یادداشتبرداری"
$ salam bundle
$ salam bundle --target=x86_64-w64-windows-gnu
$ salam bundle --target=arm64-apple-macos
در لینوکس بایگانی tar و بستهی deb، در ویندوز zip با برنامهی پنجرهای و در مک .app میگیرید. --format گزینههای rpm، AppImage، NSIS و dmg را هم دارد که به rpmbuild، appimagetool، makensis و hdiutil نیاز دارند. امضای کد با خود شماست.
وقتی چیزی کار نمیکند
- اگر
باز کردنپنجرهی بسته میدهد،آخرین خطادلیلش را میگوید. نبودن WebKitGTK یا WebView2 اینجا دیده میشود. - پنجرهای که خالی باز میشود:
SALAM_WEBVIEW_TRACEرا روی نام یک پرونده بگذارید و دوباره اجرا کنید. هر خط یک گام است: راهاندازی موتور، هر پیمایش، منبع و پیام، و هر پیامی که پل نپذیرفت. در برنامهی بدون کنسول هم کار میکند. - در
پیکربندیمقداراشکال زداییرا درست کنید و روی پنجرهباز کردن ابزار توسعهرا صدا بزنید تا ابزار توسعهی موتور باز شود. - فرمانی که هرگز پاسخ نمیدهد وعدهی صفحه را برای همیشه معلق میگذارد. مطمئن شوید هر مسیر به یکی از روشهای
پاسخیاردمیرسد.
انتخاب موتور وب
موتور را هنگام ساختن برنامه انتخاب میکنید، نه هنگام اجرا. بهطور پیشفرض برنامه از وبویوی خود سیستمعامل استفاده میکند: WebView2 در ویندوز، WKWebView در مک و WebKitGTK در لینوکس. همین است که پروندهی اجرایی را کوچک نگه میدارد و همهی راهنمای بالا هم برای همین موتور نوشته شده است. چون وبویو همراه سیستم میآید، یک صفحه ممکن است روی هر سیستم کمی متفاوت دیده شود.
اگر همهجا موتور یکسان میخواهید، میتوانید برنامه را بهجای آن با Chromium Embedded Framework (CEF) بسازید. برنامه را با پرچم -DSALAM_WEBVIEW_CEF بسازید، یا کار را به salam bundle بسپارید: در جدول [app] از salam.toml بنویسید engine = "chromium" و runtime = "dir"، یا --engine=chromium و --runtime=DIR بدهید (متغیر محیطی SALAM_CEF_DIR هم کار میکند). پوشهی runtime کتابخانهی ساختهشدهی salam_webview_cef، برنامهی salam_cef_helper و پروندههای اجرایی CEF را دارد (برای ساختنشان std/gui/webview/native/CMakeLists.txt را در مخزن سلام ببینید). این پوشه کنار برنامه کپی میشود، آن هم فقط برای tar در لینوکس و zip در ویندوز.
برنامه میتواند بپرسد کدام موتور را گرفته است. موتور یا موتور سیستم ("system") یا موتور کرومیوم ("chromium") را برمیگرداند، نام موتور نامی برای خواندن آدمها میدهد (WebKitGTK، WebView2، WKWebView یا Chromium Embedded Framework) و پشتیبانی از فرمان میگوید فرمانها کار میکنند یا نه.
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
سرچاپ "موتور:"، نمایش وب.موتور()
سرچاپ "نام:"، نمایش وب.نام موتور()
اگر نمایش وب.موتور() == نمایش وب.موتور کرومیوم:
سرچاپ "Chromium Embedded Framework"
پایان
اگر وارونه نمایش وب.پشتیبانی از فرمان():
سرچاپ "با این موتور هنوز فرمان و رویداد نیست"
پایان
پایانبه محدودیتها دقت کنید. با موتور کرومیوم امروز پنجرهها باز میشوند و صفحهها بار میشوند، ولی فرمان، رویداد، طرح نشانی سفارشی و سرویسهای سیستم (پنجرهی گفتگو، اعلان، کلیددان، سینی) هنوز در دسترس نیستند و پشتیبانی از فرمان() نادرست برمیگرداند. برابری کامل با موتور سیستم برنامهریزی شده است. اگر برنامهی شما به salam.invoke وابسته است فعلا آن را با موتور پیشفرض بسازید، یا پشتیبانی از فرمان() را بسنجید و راه دیگری بگذارید.
گونهها
درخواست Request
ساختار درخواست| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نشانی | url | رشته = "" | نشانی کامل. |
| طرح | scheme | رشته = "" | طرح نشانی، مانند app. |
| روش | method | رشته = "GET" | روش HTTP، معمولا GET. |
| مسیر | path | رشته = "/" | مسیر، با خط مورب در آغاز. |
| پرسش | query | رشته = "" | متن پس از علامت پرسش. |
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.تنظیم برنامه("com.example.window"، "پنجره")
نمایش وب.تنظیم پوشه داده("داده")
نمایش وب.ثبت طرح("app"، (خواسته: نمایش وب.درخواست):
متن := "<h1>" + خواسته.مسیر + "</h1>"
ناپایا پاسخ نهایی := نمایش وب.پاسخ { نوع محتوا = "text/html; charset=utf-8"، داده = متن برگردان تهی*، اندازه = متن.طول() برگردان صحیح۶۴ }
پاسخ نهایی.افزودن سرآیند("X-Example"، خواسته.روش + خواسته.پرسش + خواسته.نشانی + خواسته.طرح)
برگشت پاسخ نهایی
پایان)
ناپایا پنجره := نمایش وب.ایجاد(درست، نادرست)
پنجره.تنظیم عنوان("سلام")
پنجره.تنظیم اندازه(۸۰۰، ۶۰۰، نمایش وب.بدون اشاره)
پنجره.تنظیم کمترین اندازه(۴۰۰، ۳۰۰)
پنجره.تنظیم نماد("icon.png")
پنجره.تنظیم منوی زمینه(نادرست)
پنجره.اولیهسازی("window.salam = { نسخه: 1 };")
پنجره.هنگام پیام((متن: رشته): سرچاپ متن پایان)
پنجره.هنگام پیمایش((نشانی: رشته): برگشت نشانی != "https://blocked.example/" و نمایش وب.پیمایش قاب اصلی است() پایان)
پنجره.هنگام پنجره تازه((نشانی: رشته): سرچاپ نشانی پایان)
پنجره.هنگام بستن((): برگشت درست پایان)
پنجره.هنگام بارگذاری((نشانی: رشته، تمام: منطقی): سرچاپ نشانی، تمام پایان)
پنجره.هنگام از کار افتادن((): سرچاپ "از کار افتاد" پایان)
پنجره.هنگام تغییر اندازه((پهنا: صحیح، بلندی: صحیح): سرچاپ پهنا، بلندی پایان)
پنجره.وسط چین کردن()
پنجره.نمایش()
پنجره.تمرکز()
پنجره.پنهان کردن()
پنجره.کمینه کردن()
پنجره.بیشینه کردن()
پنجره.باز کردن ابزار توسعه()
پنجره.تنظیم اچ تی ام ال("<h1 dir='rtl'>سلام دنیا</h1>")
پنجره.ارزیابی("document.title = 'آماده'")
پنجره.ارزیابی با تاخیر("document.title = 'بعدا'")
سرچاپ پنجره.نشانی فعلی()، پنجره.فعال است()، پنجره.شناسه، پنجره.دسته بومی() != پوچ، پنجره.محتوای بومی() != پوچ
نمایش وب.ارسال به رشته رابط((): سرچاپ "رشته رابط" پایان)
نمایش وب.هنگام فرمان((شماره: صحیح): سرچاپ شماره پایان)
نمایش وب.هنگام پیام سینی((رویداد: صحیح): سرچاپ رویداد پایان)
نمایش وب.هنگام داده کپی((_داده: تهی*، اندازه: صحیح): سرچاپ اندازه پایان)
نمایش وب.نام پنجره پیام("نمونه")
سرچاپ نمایش وب.میزبان منو() != پوچ، نمایش وب.مبدا طرح("app")، نمایش وب.نشانی طرح("app"، "/x")، نمایش وب.اسکریپت ارسال()
پنجره.اجرا()
نمایش وب.اجرای همه()
نمایش وب.خروج()
سرچاپ نمایش وب.آخرین خطا()
اگر وارونه پنجره.بسته شده است():
پنجره.پایان دادن()
پایان
پنجره.نابود کردن()
سرچاپ نمایش وب.اشاره ثابت
پایانپاسخ Response
ساختار پاسخ| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| وضعیت | status | صحیح = 200 | وضعیت HTTP، بهطور پیشفرض ۲۰۰. |
| نوع محتوا | mime | رشته = "text/html" | نوع محتوا. |
| داده | data | تهی* | اشارهگر به بدنهی پاسخ. |
| اندازه | size | صحیح۶۴ = 0 | اندازهی بدنه به بایت. |
| سرآیندها | headers | وکتور<رشته> | سرآیندهای بیشتر، به صورت جفت نام و مقدار. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
افزودن سرآیند Header
تابع افزودن سرآیند(name: رشته، value: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نمایش وب WebView
ساختار نمایش وب| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | صحیح = -1 | شمارهی این پنجره درون بسته. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نابود کردن Destroy
تابع نابود کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
اجرا Run
تابع اجرا()پایان دادن اجرا میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
پایان دادن Terminate
تابع پایان دادن()اجرا میخواهد برگردد. پنجره تا نابود کردن باز میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم عنوان SetTitle
تابع تنظیم عنوان(title: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم اندازه SetSize
تابع تنظیم اندازه(width: صحیح، height: صحیح، hints: صحیح)اشاره ثابت کاربر نمیتواند اندازه را عوض کند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم کمترین اندازه SetMinSize
تابع تنظیم کمترین اندازه(width: صحیح، height: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم نماد SetIcon
تابع تنظیم نماد(path: رشته).ico در ویندوز و هر تصویری در مک.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم اچ تی ام ال SetHTML
تابع تنظیم اچ تی ام ال(html: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
پیمایش Navigate
تابع پیمایش(url: رشته)واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
ناپایا پنجره := نمایش وب.ایجاد()
پنجره.تنظیم عنوان("زبان سلام")
پنجره.تنظیم اندازه(۱۰۲۴، ۷۶۸، نمایش وب.اشاره ثابت)
پنجره.پیمایش("https://salamlang.ir")
پنجره.اجرا()
پنجره.نابود کردن()
پایانارزیابی Eval
تابع ارزیابی(js: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
ارزیابی با تاخیر EvalLater
تابع ارزیابی با تاخیر(js: رشته)ارزیابی، ولی از هر رشتهای امن است: کد کمی بعد در رشتهی رابط اجرا میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
اولیهسازی Init
تابع اولیهسازی(js: رشته، all_frames: منطقی = نادرست)درست در قابها هم اجرا میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نشانی فعلی URL
تابع نشانی فعلی(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نمایش Show
تابع نمایش()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
پنهان کردن Hide
تابع پنهان کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تمرکز Focus
تابع تمرکز()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
کمینه کردن Minimize
تابع کمینه کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
بیشینه کردن Maximize
تابع بیشینه کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
وسط چین کردن Center
تابع وسط چین کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
فعال است IsActive
تابع فعال است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
دسته بومی Native
تابع دسته بومی(): تهی*GtkWindow*، HWND یا NSWindow*.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
محتوای بومی Content
تابع محتوای بومی(): تهی*GtkBox در لینوکس و خود پنجره در جاهای دیگر.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
باز کردن ابزار توسعه OpenDevTools
تابع باز کردن ابزار توسعه()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم منوی زمینه SetContextMenu
تابع تنظیم منوی زمینه(enabled: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام پیام OnMessage
تابع هنگام پیام(handler: تابع(رشته))اسکریپت ارسال میفرستد فراخوانی میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام پیمایش OnNavigate
تابع هنگام پیمایش(handler: تابع(رشته): منطقی)پیمایش قاب اصلی است را ببینید.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام پنجره تازه OnNewWindow
تابع هنگام پنجره تازه(handler: تابع(رشته))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام بستن OnClose
تابع هنگام بستن(handler: تابع(): منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام بارگذاری OnLoad
تابع هنگام بارگذاری(handler: تابع(رشته، منطقی))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام از کار افتادن OnCrash
تابع هنگام از کار افتادن(handler: تابع())نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام تغییر اندازه OnResize
تابع هنگام تغییر اندازه(handler: تابع(صحیح، صحیح))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
بسته شده است IsClosed
تابع بسته شده است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
پیکربندی Config
ساختار پیکربندیآغاز داده میشود.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | رشته = "" | شناسهی دامنهوار مانند com.example.notes. پوشهی داده را نامگذاری میکند و بستهی داراییها را درهم میکند. |
| نام | name | رشته = "" | نامی که کاربر میبیند. |
| نگارش | version | رشته = "" | متن نگارش. |
| نماد | icon | رشته = "" | پروندهی نماد برای اعلانها. |
| طرح | scheme | رشته = "app" | طرحی که صفحههای محلی از آن بارگذاری میشوند؛ پیشفرض app. |
| پوشه دارایی ها | assets_dir | رشته = "" | صفحهها را از این پوشه میدهد؛ برای زمان توسعه. اگر خالی باشد فقط از بسته خوانده میشود. |
| مسیر فشرده | pack_path | رشته = "" | داراییها را از این پروندهی بسته میخواند. بهطور پیشفرض بستهی درون برنامه به کار میرود. |
| سیاست محتوا | csp | رشته = "" | سرآیند Content-Security-Policy برای صفحههای محلی. |
| تک صفحه ای | spa | منطقی = نادرست | به مسیرهای ناشناخته با index.html پاسخ میدهد؛ برای برنامههای تکصفحهای. |
| اشکال زدایی | debug | منطقی = نادرست | ابزار توسعه را روشن میکند. |
| پیوندهای بیرونی | external_links | منطقی = درست | پیوند سایتهای دیگر را در مرورگر سیستم باز میکند؛ پیشفرض روشن. |
واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
نمایش وب.آغاز(نمایش وب.پیکربندی {
شناسه = "com.example.app"، نام = "برنامه"، نگارش = "1.0"، طرح = "app"، پوشه دارایی ها = "www"، مسیر فشرده = ""، سیاست محتوا = "default-src 'self'"، تک صفحه ای = نادرست، اشکال زدایی = نادرست، پیوندهای بیرونی = درست
})
اگر وارونه نمایش وب.نمونه یکتا((ورودیها: وکتور<رشته>): سرچاپ ورودیها.طول() پایان):
برگشت
پایان
ناپایا مجازها := وکتور {} برگردان وکتور<رشته>
مجازها.بیفزا("greet")
نمایش وب.اجازه دادن("https://example.com"، مجازها)
سرچاپ نمایش وب.مجاز است("https://example.com"، "greet")، نمایش وب.مبدا نشانی("https://example.com/a")
سرچاپ نمایش وب.مسیر امن دارایی("/a/")، نمایش وب.پوشه داده()، نمایش وب.نشانی دارایی("/index.html")، نمایش وب.پیکربندی فعلی().نام
سرچاپ نمایش وب.فشرده کردن پوشه("www"، "app.pack"، "com.example.app")
نمایش وب.فرمان("greet"، (ف: نمایش وب.فراخوان):
سرچاپ ف.فرمان، ف.آرگومان ها، ف.مبدا، ف.پنجره، ف.متن("name")، ف.عدد("n")، ف.درستی("b")، ف.دارد("x")
ف.پاسخ متنی("سلام")
پایان)
نمایش وب.فرمان ناهمگام("slow"، (ف: نمایش وب.فراخوان):
ف.پاسخ(`{"ok":true}`)
ف.پاسخ عددی(۱ برگردان صحیح۶۴)
ف.پاسخ درستی(درست)
ف.پاسخ خالی()
ف.رد("نه")
پایان)
نمایش وب.هنگام رویداد("ready"، (داده: رشته): نمایش وب.رویداد فرستادن("hello"، داده) پایان)
ناپایا اسکریپتها := وکتور {} برگردان وکتور<رشته>
اسکریپتها.بیفزا("window.started = true")
ناپایا مبداها := وکتور {} برگردان وکتور<رشته>
مبداها.بیفزا("https://example.org")
پ := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره {
برچسب = "main"، عنوان = "برنامه"، پهنا = ۸۰۰، بلندی = ۶۰۰، کمترین پهنا = ۴۰۰، کمترین بلندی = ۳۰۰، نشانی = ""، اچ تی ام ال = ""، نماد = ""، تغییرپذیر = درست، وسط = درست، نمایان = درست، منوی زمینه = درست، اسکریپت ها = اسکریپتها، پیمایش مجاز = مبداها
})
پ.هنگام بستن((): برگشت نمایش وب.تایید("بستن"، "پنجره بسته شود؟") پایان)
پ.هنگام بارگذاری((نشانی: رشته، تمام: منطقی): سرچاپ نشانی، تمام پایان)
پ.هنگام از کار افتادن((): پ.پیمایش(نمایش وب.نشانی دارایی("/error.html")) پایان)
پ.هنگام تغییر اندازه((ای: صحیح، جی: صحیح): سرچاپ ای، جی پایان)
پ.تنظیم عنوان("برنامه")
پ.تنظیم اندازه(۹۰۰، ۷۰۰)
پ.نمایش()
پ.تمرکز()
پ.پنهان کردن()
پ.کمینه کردن()
پ.بیشینه کردن()
پ.ارزیابی("document.title")
پ.رویداد فرستادن("hello"، "1")
پ.تنظیم اچ تی ام ال("<h1>سلام</h1>")
پ.باز کردن ابزار توسعه()
سرچاپ پ.شماره، پ.نشانی فعلی()، پ.فعال است()، پ.بسته شده است()، پ.دسته بومی() != پوچ، نمایش وب.گرفتن پنجره("main").شماره
نمایش وب.ارسال به رشته رابط((): سرچاپ "رشته رابط" پایان)
ناپایا موردها := وکتور {} برگردان وکتور<نمایش وب.موردمنو>
موردها.بیفزا(نمایش وب.مورد("open"، "باز کردن"))
موردها.بیفزا(نمایش وب.خط جداکننده())
موردها.بیفزا(نمایش وب.موردمنو { شناسه = "quit"، برچسب = "خروج"، جداکننده = نادرست })
ناپایا نوار := وکتور {} برگردان وکتور<نمایش وب.موردمنو>
نوار.بیفزا(نمایش وب.زیرمنوی تازه("پرونده"، موردها))
نمایش وب.تنظیم منو(پ، نوار)
نمایش وب.هنگام منو((شناسه: رشته): سرچاپ شناسه پایان)
سرچاپ نمایش وب.تنظیم سینی("icon.png"، "برنامه"، موردها)
نمایش وب.هنگام کلیک سینی((): پ.تمرکز() پایان)
نمایش وب.حذف سینی()
سرچاپ نمایش وب.انتخاب پوشه("پوشه")، نمایش وب.انتخاب پرونده("پرونده"، "متن"، "*.txt")، نمایش وب.ذخیره پرونده("ذخیره"، "a.txt")
نمایش وب.پیام("عنوان"، "متن")
سرچاپ نمایش وب.اعلان("عنوان"، "متن")، نمایش وب.باز کردن نشانی("https://example.com")
نمایش وب.هنگام کلیک اعلان((): پ.تمرکز() پایان)
نمایش وب.درخواست توجه(پ)
سرچاپ نمایش وب.ذخیره راز("key"، "value")، نمایش وب.خواندن راز("key")
نمایش وب.حذف راز("key")
سرچاپ نمایش وب.آخرین خطا()
نمایش وب.اجرا()
نمایش وب.خروج()
پ.بستن()
پایانگزینه های پنجره WindowOptions
ساختار گزینه های پنجره| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| برچسب | label | رشته = "main" | نامی برای یافتن پنجره؛ پیشفرض main. |
| عنوان | title | رشته = "" | عنوان. |
| پهنا | width | صحیح = 1024 | پهنا به پیکسل. |
| بلندی | height | صحیح = 768 | بلندی به پیکسل. |
| کمترین پهنا | min_width | صحیح = 0 | کمترین پهنا. |
| کمترین بلندی | min_height | صحیح = 0 | کمترین بلندی. |
| نشانی | url | رشته = "" | سایتی برای بارگذاری. خالی یعنی index.html از داراییها. |
| اچ تی ام ال | html | رشته = "" | HTML برای نمایش مستقیم به جای نشانی. |
| نماد | icon | رشته = "" | پروندهی نماد. |
| تغییرپذیر | resizable | منطقی = درست | کاربر میتواند اندازه را تغییر دهد. |
| وسط | center | منطقی = درست | در وسط صفحهنمایش آغاز شود. |
| نمایان | visible | منطقی = درست | پنجره همان لحظه نشان داده شود. |
| منوی زمینه | context_menu | منطقی = درست | منوی کلیک راست صفحه مجاز باشد. |
| اسکریپت ها | scripts | وکتور<رشته> | جاوااسکریپتی که پیش از اجرای صفحه در همهی صفحهها و قابها نصب میشود. |
| پیمایش مجاز | allow_navigation | وکتور<رشته> | مبداهای دیگری که این پنجره میتواند به آنها برود. این مبداها به فرمانها دسترسی ندارند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
فراخوان Call
ساختار فراخوانپاسخ یا رد و از هر رشتهای پایان مییابد. پاسخ دوم نادیده گرفته میشود و پاسخ، متنهای فراخوان را آزاد میکند، پس آنچه لازم دارید را پیش از آن بخوانید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| فرمان | command | رشته = "" | نام فرمان. |
| آرگومان ها | args | رشته = "{}" | آرگومانها به صورت متن جیسون. |
| مبدا | origin | رشته = "" | مبدا صفحهی فراخواننده. |
| پنجره | window | صحیح = -1 | شمارهی پنجرهی فراخواننده. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
متن Str
تابع متن(key: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
عدد Int
تابع عدد(key: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
درستی Bool
تابع درستی(key: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
دارد Has
تابع دارد(key: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پاسخ Resolve
تابع پاسخ(raw_json: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پاسخ متنی ResolveStr
تابع پاسخ متنی(value: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پاسخ عددی ResolveInt
تابع پاسخ عددی(value: صحیح۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پاسخ درستی ResolveBool
تابع پاسخ درستی(value: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پاسخ خالی ResolveNull
تابع پاسخ خالی()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
رد Reject
تابع رد(message: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پنجره Window
ساختار پنجره| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شماره | index | صحیح = -1 | شمارهی پنجره. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پیمایش Navigate
تابع پیمایش(url: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تنظیم اچ تی ام ال SetHTML
تابع تنظیم اچ تی ام ال(html: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
ارزیابی Eval
تابع ارزیابی(js: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
رویداد فرستادن Emit
تابع رویداد فرستادن(event: رشته، raw_json: رشته = "پوچ")نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تنظیم عنوان SetTitle
تابع تنظیم عنوان(title: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تنظیم اندازه SetSize
تابع تنظیم اندازه(width: صحیح، height: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
نمایش Show
تابع نمایش()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پنهان کردن Hide
تابع پنهان کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تمرکز Focus
تابع تمرکز()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
کمینه کردن Minimize
تابع کمینه کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
بیشینه کردن Maximize
تابع بیشینه کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
بستن Close
تابع بستن()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
نشانی فعلی URL
تابع نشانی فعلی(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
فعال است IsActive
تابع فعال است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
بسته شده است IsClosed
تابع بسته شده است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
باز کردن ابزار توسعه OpenDevTools
تابع باز کردن ابزار توسعه()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام بستن OnClose
تابع هنگام بستن(handler: تابع(): منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام بارگذاری OnLoad
تابع هنگام بارگذاری(handler: تابع(رشته، منطقی))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام از کار افتادن OnCrash
تابع هنگام از کار افتادن(handler: تابع())نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام تغییر اندازه OnResize
تابع هنگام تغییر اندازه(handler: تابع(صحیح، صحیح))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
دسته بومی Native
تابع دسته بومی(): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
موردمنو MenuItem
ساختار موردمنو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | رشته = "" | مقداری که هنگام منو میگیرد. |
| برچسب | label | رشته = "" | متن. |
| جداکننده | separator | منطقی = نادرست | این مورد یک خط است. |
| زیرمنو | children | وکتور<موردمنو> | موردهای زیرمنو. |
نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پایاها و متغیرها
بدون اشاره HINT_NONE
پایا بدون اشاره: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
اشاره ثابت HINT_FIXED
پایا اشاره ثابت: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
موتور سیستم ENGINE_SYSTEM
پایا موتور سیستم: رشته = "system""system": وبویوی خود سیستمعامل، پیشفرض.واردسازی رابط گرافیکی.نمایش وب
تابع ریشه:
سرچاپ "موتور:"، نمایش وب.موتور()
سرچاپ "نام:"، نمایش وب.نام موتور()
اگر نمایش وب.موتور() == نمایش وب.موتور کرومیوم:
سرچاپ "Chromium Embedded Framework"
پایان
اگر وارونه نمایش وب.پشتیبانی از فرمان():
سرچاپ "با این موتور هنوز فرمان و رویداد نیست"
پایان
پایانموتور کرومیوم ENGINE_CHROMIUM
پایا موتور کرومیوم: رشته = "chromium""chromium": Chromium Embedded Framework که هنگام ساختن با -DSALAM_WEBVIEW_CEF انتخاب میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Engine.salam
تابعها
ارسال به رشته رابط Dispatch
تابع ارسال به رشته رابط(work: تابع())نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
اجرای همه RunAll
تابع اجرای همه()خروج اجرا میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
خروج Quit
تابع خروج()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم برنامه SetApp
تابع تنظیم برنامه(id: رشته، name: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
تنظیم پوشه داده SetDataDir
تابع تنظیم پوشه داده(dir: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
ثبت طرح RegisterScheme
تابع ثبت طرح(name: رشته، handler: تابع(درخواست): پاسخ)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نشانی طرح SchemeURL
تابع نشانی طرح(name: رشته، path: رشته): رشتهapp://localhost/x، یا https://app.localhost/x در ویندوز.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
مبدا طرح SchemeOrigin
تابع مبدا طرح(name: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
آخرین خطا LastError
تابع آخرین خطا(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
ثبت رد Trace
تابع ثبت رد(text: رشته)SALAM_WEBVIEW_TRACE نام میبرد میافزاید و اگر این متغیر تنظیم نشده باشد کاری نمیکند. پشتیبانها هر مرحلهی راهاندازی، پیمایش و پیام را با آن ثبت میکنند تا بتوان علت خالی ماندن پنجره را پیدا کرد، حتی در برنامهای که پایانه ندارد.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام فرمان OnCommand
تابع هنگام فرمان(handler: تابع(صحیح))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام پیام سینی OnTrayMessage
تابع هنگام پیام سینی(handler: تابع(صحیح))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
هنگام داده کپی OnCopyData
تابع هنگام داده کپی(handler: تابع(تهی*، صحیح))WM_COPYDATA فرستادهشده به پنجرهی پیام فراخوانی میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
میزبان منو MenuHost
تابع میزبان منو(): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
نام پنجره پیام NameMessageWindow
تابع نام پنجره پیام(title: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
پیمایش قاب اصلی است NavigationIsMainFrame
تابع پیمایش قاب اصلی است(): منطقیهنگام پیمایش: آیا خود صفحه پیمایش میکند. WebKitGTK قاب را از صفحه تشخیص نمیدهد و در لینوکس به جای آن اقدام کاربر را گزارش میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
اسکریپت ارسال PostScript
تابع اسکریپت ارسال(): رشتههنگام پیام میفرستد. فراخواننده آن را آزاد میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
ایجاد Create
تابع ایجاد(debug: منطقی = نادرست، visible: منطقی = درست): نمایش وبنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam
موتور Engine
تابع موتور(): رشتهENGINE_SYSTEM یا ENGINE_CHROMIUM.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Engine.salam
نام موتور EngineName
تابع نام موتور(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Engine.salam
پشتیبانی از فرمان SupportsCommands
تابع پشتیبانی از فرمان(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-Engine.salam
مبدا نشانی OriginOf
تابع مبدا نشانی(url: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
مجاز است Allowed
تابع مجاز است(origin: رشته، command: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
فشرده کردن پوشه PackDir
تابع فشرده کردن پوشه(dir: رشته، out_path: رشته، key: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
آغاز Init
تابع آغاز(config: پیکربندی)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پیکربندی فعلی CurrentConfig
تابع پیکربندی فعلی(): پیکربندینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پوشه داده DataDir
تابع پوشه داده(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
اجازه دادن Allow
تابع اجازه دادن(origin: رشته، commands: وکتور<رشته>)* ختم شود. پیش از باز کردن پنجره فراخوانی شود. بهطور پیشفرض هیچ مبدا بیرونی اجازه ندارد.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
فرمان Command
تابع فرمان(name: رشته، handler: تابع(فراخوان))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
فرمان ناهمگام CommandAsync
تابع فرمان ناهمگام(name: رشته، handler: تابع(فراخوان))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام رویداد On
تابع هنگام رویداد(event: رشته، handler: تابع(رشته))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
رویداد فرستادن Emit
تابع رویداد فرستادن(event: رشته، raw_json: رشته = "پوچ")نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
نشانی دارایی AssetURL
تابع نشانی دارایی(path: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
باز کردن Open
تابع باز کردن(options: گزینه های پنجره): پنجرهبسته شده است را بررسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
گرفتن پنجره GetWindow
تابع گرفتن پنجره(label: رشته): پنجرهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
اجرا Run
تابع اجرا()خروج اجرا میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
باز کردن نشانی OpenURL
تابع باز کردن نشانی(url: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
انتخاب پوشه PickFolder
تابع انتخاب پوشه(title: رشته = "Select a folder"): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
انتخاب پرونده PickFile
تابع انتخاب پرونده(title: رشته = "Open"، filter_name: رشته = ""، patterns: رشته = ""): رشته*.txt;*.md هستند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
ذخیره پرونده SaveFile
تابع ذخیره پرونده(title: رشته = "Save"، default_name: رشته = ""): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
پیام Message
تابع پیام(title: رشته، text: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تایید Confirm
تابع تایید(title: رشته، text: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
اعلان Notify
تابع اعلان(title: رشته، body: رشته، sound: رشته = ""): منطقیdefault یا alert نشان میدهد. اگر سیستم راهی نداشته باشد نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام کلیک اعلان OnNotifyClick
تابع هنگام کلیک اعلان(handler: تابع())نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
درخواست توجه RequestAttention
تابع درخواست توجه(window: پنجره)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
ذخیره راز SecretSet
تابع ذخیره راز(key: رشته، value: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
خواندن راز SecretGet
تابع خواندن راز(key: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
حذف راز SecretDelete
تابع حذف راز(key: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
مورد Item
تابع مورد(id: رشته، label: رشته): موردمنونمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
خط جداکننده Separator
تابع خط جداکننده(): موردمنونمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
زیرمنوی تازه Submenu
تابع زیرمنوی تازه(label: رشته، items: وکتور<موردمنو>): موردمنونمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام منو OnMenu
تابع هنگام منو(handler: تابع(رشته))نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تنظیم منو SetMenu
تابع تنظیم منو(window: پنجره، items: وکتور<موردمنو>)نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
تنظیم سینی SetTray
تابع تنظیم سینی(icon: رشته، tooltip: رشته، items: وکتور<موردمنو>): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
حذف سینی RemoveTray
تابع حذف سینی()نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
هنگام کلیک سینی OnTrayClick
تابع هنگام کلیک سینی(handler: تابع())نمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
نمونه یکتا SingleInstance
تابع نمونه یکتا(on_second: تابع(وکتور<رشته>)): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam
مسیر امن دارایی SafeAssetPath
تابع مسیر امن دارایی(request_path: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: gui-webview-App.salam