کتابخانه‌ی استاندارد · وب و مرورگر

نمایش وب 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 می‌سازد و نشانش می‌دهد. هر چه صفحه لازم دارد، حتی برگه‌ی سبک، می‌تواند در همان یک رشته باشد؛ پس هیچ فایلی لازم نیست کنار برنامه‌ی اجرایی پخش شود. اشاره ثابت پنجره را در اندازه‌ای که خواسته‌اید نگه می‌دارد که برای پنجره‌ی کوچکی مثل این خلاصه‌ی سفارش مناسب است.

gui-webview-guide-report.salam
واردسازی رابط گرافیکی.نمایش وب
واردسازی رشته

ساختار کالا:
    همگانی نام: رشته = ""
    همگانی تعداد: صحیح = ۰
    همگانی بها: صحیح = ۰
پایان

تابع صفحه سفارش(کالاها: وکتور<کالا>): رشته:
    ناپایا ردیف ها := ""
    ناپایا جمع کل := ۰
    هر ک در کالاها:
        مبلغ := ک.تعداد * ک.بها
        جمع کل += مبلغ
        ردیف ها = ردیف ها + "<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> در صفحه می‌رود. اسکریپت هنگام بار شدن صفحه اجرا می‌شود، پس داده پیش از کشیده شدن هر چیزی آماده است.

gui-webview-guide-data.salam
واردسازی رابط گرافیکی.نمایش وب
واردسازی کدگذاری.جیسون

ساختار کار:
    همگانی عنوان: رشته = ""
    همگانی انجام: منطقی = نادرست
پایان

تابع ریشه:
    ناپایا کارها := وکتور {} برگردان وکتور<کار>
    کارها.بیفزا(کار { عنوان = "نوشتن گزارش"، انجام = درست })
    کارها.بیفزا(کار { عنوان = "فرستادن آن برای سارا" })
    کارها.بیفزا(کار { عنوان = "رزرو اتاق جلسه" })
    صفحه := `<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 یک سرور توسعه‌ی محلی را در پنجره‌ای بومی می‌گذارد.

gui-webview-guide-launch.salam
واردسازی رابط گرافیکی.نمایش وب
واردسازی سیستم عامل

تابع ریشه:
    آرگ ها := سیستم عامل.آرگومان ها()
    ناپایا نشانی := "https://www.salamlang.ir/"
    اگر آرگ ها.طول() > ۱:
        نشانی = آرگ ها.بگیر(۱)
    پایان
    ناپایا پنجره := نمایش وب.ایجاد()
    پنجره.تنظیم عنوان(نشانی)
    پنجره.تنظیم اندازه(۱۲۸۰، ۸۰۰، نمایش وب.بدون اشاره)
    پنجره.پیمایش(نشانی)
    پنجره.اجرا()
    اگر پنجره.بسته شده است():
        سرچاپ "پنجره بسته شد"
    پایان
    پنجره.نابود کردن()
پایان

اجرا تا وقتی کاربر پنجره را ببندد منتظر می‌ماند؛ خط‌های پس از آن جای ذخیره‌ی وضعیت و جمع و جور کردن است. در هر حال یک بار در پایان نابود کردن را صدا بزنید. پایان دادن باعث می‌شود اجرا در نوبت بعدی‌اش برگردد؛ در لینوکس و ویندوز این نوبت فقط با رویداد بعدی پنجره، مثلا حرکت موشواره، می‌رسد. در مک به جای آن کل برنامه را می‌بندد، پس خط‌های پس از اجرا آن‌جا اجرا نمی‌شوند.

برنامه‌ای با یک صفحه و یک فرمان

در زمان توسعه پوشه دارایی ها پوشه‌ی شما را مستقیم می‌دهد و با بارگذاری دوباره تغییرات دیده می‌شوند. بدون آن پرونده‌های درون برنامه به کار می‌روند.

gui-webview-guide-start.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "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", {});

فرمان معمولا در رشته‌ی رابط اجرا می‌شود، پس کوتاه نگهش دارید. کار طولانی را با فرمان ناهمگام ثبت کنید؛ صفحه روان می‌ماند و پاسخ از رشته‌ی کارگر امن است.

فرمان، خطا و کار کند

آرگومان‌ها به شکل جیسون می‌رسند. متن، عدد و درستی هر کدام یکی را با نامش می‌خوانند و دارد می‌گوید صفحه آن را فرستاده است یا نه. هر فراخوان را دقیقا یک بار تمام کنید: با یکی از روش‌های پاسخ یا با رد که وعده‌ی صفحه را با پیام شما خطادار می‌کند. پاسخ دوم نادیده گرفته می‌شود.

فرمان در رشته‌ی رابط اجرا می‌شود، پس فرمان کند پنجره را می‌خشکاند. آن را با فرمان ناهمگام ثبت کنید تا روی رشته‌ی کارگر اجرا شود و پاسخ را بعدا هم بتوانید صدا بزنید. هر کار روی پنجره باید در رشته‌ی رابط باشد، پس رشته‌ی کارگر آن را به ارسال به رشته رابط می‌دهد.

gui-webview-guide-commands.salam
واردسازی رابط گرافیکی.نمایش وب
واردسازی کدگذاری.جیسون
واردسازی همگام سازی

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "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);
}

پنجره، رویداد و منو

باز کردن را چند بار می‌توانید صدا بزنید. به هر پنجره یک برچسب بدهید و با گرفتن پنجره دوباره پیدایش کنید. رویداد فرستادن روی پنجره فقط به همان پنجره می‌رسد و روی بسته‌ی برنامه رومیزی به همه. هنگام بستن وقتی کاربر پنجره را می‌بندد اجرا می‌شود: نادرست برگردانید تا پنجره بماند؛ جای مناسبی برای پرسیدن درباره‌ی کار ذخیره‌نشده.

gui-webview-guide-windows.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
    پنجره اصلی := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { برچسب = "main"، عنوان = "یادداشت"، پهنا = ۹۰۰، بلندی = ۶۰۰، کمترین پهنا = ۴۸۰، کمترین بلندی = ۳۲۰ })
    پنجره اصلی.هنگام بستن(():
        برگشت نمایش وب.تایید("یادداشت"، "پنجره‌ی یادداشت بسته شود؟")
    پایان)
    پنجره اصلی.هنگام تغییر اندازه((پ: صحیح، ب: صحیح):
        سرچاپ "اندازه"، پ، ب
    پایان)
    نمایش وب.فرمان("open_help"، (ف: نمایش وب.فراخوان):
        راهنما := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { برچسب = "help"، عنوان = "راهنما"، پهنا = ۵۲۰، بلندی = ۴۲۰، اچ تی ام ال = "<h1>راهنما</h1>" })
        راهنما.رویداد فرستادن("hello"، `{"from":"main"}`)
        ف.پاسخ خالی()
    پایان)
    نمایش وب.هنگام منو((شناسه: رشته):
        اگر شناسه برابر "help":
            نمایش وب.گرفتن پنجره("main").رویداد فرستادن("menu"، `"help"`)
        پایان
        اگر شناسه برابر "quit":
            نمایش وب.خروج()
        پایان
    پایان)
    ناپایا موردها := وکتور {} برگردان وکتور<نمایش وب.مورد‌منو>
    موردها.بیفزا(نمایش وب.مورد("help"، "راهنما"))
    موردها.بیفزا(نمایش وب.خط جداکننده())
    موردها.بیفزا(نمایش وب.مورد("quit"، "خروج"))
    نمایش وب.تنظیم منو(پنجره اصلی، موردها)
    نمایش وب.اجرا()
پایان

منو فهرستی از موردهاست که با مورد، خط جداکننده و زیرمنوی تازه ساخته می‌شود. هر کلیک، از هر منویی، با شناسه‌ی مورد به هنگام منو می‌رسد.

پنجره‌ی گفتگو، اعلان، راز و سینی

این فراخوان‌ها از هر چه سیستم دارد استفاده می‌کنند، پس یک برنامه روی هر سیستم بومی رفتار می‌کند. پنجره‌ی انتخاب پرونده اگر کاربر انصراف دهد متن خالی برمی‌گرداند. ذخیره راز و خواندن راز مقدار کوچکی مثل نشانه‌ی ورود را به جای یک پرونده در پوشه‌ی داده، در دسته‌کلید سیستم نگه می‌دارند. نمونه یکتا اگر برنامه از پیش اجرا باشد نادرست برمی‌گرداند و نسخه‌ی در حال اجرا ورودی‌های تازه را در تابع خود می‌گیرد.

gui-webview-guide-services.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "com.example.notes"، نام = "یادداشت"، پوشه دارایی ها = "www" })
    پنجره := نمایش وب.باز کردن(نمایش وب.گزینه های پنجره { عنوان = "یادداشت" })
    ماندن := نمایش وب.نمونه یکتا((ورودی‌ها: وکتور<رشته>):
        سرچاپ "اجرای دوم با"، ورودی‌ها.طول()، "ورودی"
        نمایش وب.گرفتن پنجره("main").تمرکز()
    پایان)
    اگر وارونه ماندن:
        برگشت ۰
    پایان
    نمایش وب.فرمان("choose_folder"، (ف: نمایش وب.فراخوان):
        ف.پاسخ متنی(نمایش وب.انتخاب پوشه("پوشه را انتخاب کنید"))
    پایان)
    نمایش وب.فرمان("sign_in"، (ف: نمایش وب.فراخوان):
        موفق := نمایش وب.ذخیره راز("token"، ف.متن("token"))
        ف.پاسخ درستی(موفق)
    پایان)
    نمایش وب.فرمان("token"، (ف: نمایش وب.فراخوان):
        ف.پاسخ متنی(نمایش وب.خواندن راز("token"))
    پایان)
    نمایش وب.فرمان("done"، (ف: نمایش وب.فراخوان):
        نمایش وب.اعلان("یادداشت"، "خروجی شما آماده است")
        نمایش وب.درخواست توجه(پنجره)
        ف.پاسخ خالی()
    پایان)
    نمایش وب.هنگام کلیک سینی(():
        پنجره.نمایش()
        پنجره.تمرکز()
    پایان)
    ناپایا سینی := وکتور {} برگردان وکتور<نمایش وب.مورد‌منو>
    سینی.بیفزا(نمایش وب.مورد("quit"، "خروج"))
    نمایش وب.تنظیم سینی("icon.png"، "یادداشت"، سینی)
    نمایش وب.اجرا()
پایان

یادتان باشد صفحه فقط فرمانی را که اجازه دارد می‌تواند صدا بزند. صفحه‌های محلی همه را می‌توانند. اگر سایتی دور را بار می‌کنید، فرمان‌های خطرناک مثل choose_folder بالا را فقط برای مبداهایی که به آن‌ها اعتماد دارید فهرست کنید.

پنجره‌ای دور یک وب‌سایت

به نشانی آدرسی بدهید تا سایتی را که دارید در پنجره بگذارید و با اجازه دادن به همان یک سایت دسترسی به فرمان‌های دلخواه بدهید. صفحه‌ی خطای محلی می‌تواند در دارایی‌ها بماند.

gui-webview-guide-remote.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی { شناسه = "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) و پشتیبانی از فرمان می‌گوید فرمان‌ها کار می‌کنند یا نه.

gui-webview-guide-engine.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    سرچاپ "موتور:"، نمایش وب.موتور()
    سرچاپ "نام:"، نمایش وب.نام موتور()
    اگر نمایش وب.موتور() == نمایش وب.موتور کرومیوم:
        سرچاپ "Chromium Embedded Framework"
    پایان
    اگر وارونه نمایش وب.پشتیبانی از فرمان():
        سرچاپ "با این موتور هنوز فرمان و رویداد نیست"
    پایان
پایان

به محدودیت‌ها دقت کنید. با موتور کرومیوم امروز پنجره‌ها باز می‌شوند و صفحه‌ها بار می‌شوند، ولی فرمان، رویداد، طرح نشانی سفارشی و سرویس‌های سیستم (پنجره‌ی گفتگو، اعلان، کلیددان، سینی) هنوز در دسترس نیستند و پشتیبانی از فرمان() نادرست برمی‌گرداند. برابری کامل با موتور سیستم برنامه‌ریزی شده است. اگر برنامه‌ی شما به salam.invoke وابسته است فعلا آن را با موتور پیش‌فرض بسازید، یا پشتیبانی از فرمان() را بسنجید و راه دیگری بگذارید.

گونه‌ها

درخواست Request

ساختار درخواست
درخواستی که طرح سفارشی از صفحه گرفته است.
نامانگلیسیگونهتوضیح
نشانیurlرشته = ""نشانی کامل.
طرحschemeرشته = ""طرح نشانی، مانند app.
روشmethodرشته = "GET"روش HTTP، معمولا GET.
مسیرpathرشته = "/"مسیر، با خط مورب در آغاز.
پرسشqueryرشته = ""متن پس از علامت پرسش.
gui-webview-Window.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.تنظیم برنامه("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: رشته)
نماد پنجره از یک پرونده: هر تصویری که GTK بخواند در لینوکس، .ico در ویندوز و هر تصویری در مک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam

تنظیم اچ تی ام ال SetHTML

تابع تنظیم اچ تی ام ال(html: رشته)
محتوای HTML را نشان می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam

پیمایش Navigate

تابع پیمایش(url: رشته)
نشانی را باز می‌کند.
gui-webview-Navigate.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    ناپایا پنجره := نمایش وب.ایجاد()
    پنجره.تنظیم عنوان("زبان سلام")
    پنجره.تنظیم اندازه(۱۰۲۴، ۷۶۸، نمایش وب.اشاره ثابت)
    پنجره.پیمایش("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منطقی = درستپیوند سایت‌های دیگر را در مرورگر سیستم باز می‌کند؛ پیش‌فرض روشن.
gui-webview-App.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    نمایش وب.آغاز(نمایش وب.پیکربندی {
        شناسه = "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: رشته)
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

ساختار مورد‌منو
یک مورد منو.
نامانگلیسیگونهتوضیح
شناسه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": وب‌ویوی خود سیستم‌عامل، پیش‌فرض.
gui-webview-Engine.salam
واردسازی رابط گرافیکی.نمایش وب

تابع ریشه:
    سرچاپ "موتور:"، نمایش وب.موتور()
    سرچاپ "نام:"، نمایش وب.نام موتور()
    اگر نمایش وب.موتور() == نمایش وب.موتور کرومیوم:
        سرچاپ "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

تابع میزبان منو(): تهی*
شیئی که منوهای بومی به آن گزارش می‌دهند: پنجره‌ی پیام در ویندوز و نماینده‌ی برنامه در مک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam

نام پنجره پیام NameMessageWindow

تابع نام پنجره پیام(title: رشته)
فقط ویندوز: عنوان پنجره‌ی پیام پنهان، تا فرایند دیگر آن را پیدا کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-webview-Window.salam

تابع پیمایش قاب اصلی است(): منطقی
درون هنگام پیمایش: آیا خود صفحه پیمایش می‌کند. 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

تابع نام موتور(): رشته
موتور به زبان آدم‌ها: WebKitGTK، WebView2، WKWebView یا Chromium Embedded Framework.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: 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: رشته): منطقی
نشانی http، https، mailto یا tel را در برنامه‌ی پیش‌فرض سیستم باز می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: 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

تابع زیرمنوی تازه(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