#Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals Private xui As XUI Dim rn As RuntimePermissions End Sub Sub Globals Private WebView1 As WebView Private ProgressBar1 As ProgressBar End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("layout") 'تنظیمات WebView ConfigureWebView 'شروع سرویسها 'StartService(FirebaseMessaging) 'StartService(pnservice) 'بارگذاری قالب از پوشه web LoadWebTemplate 'درخواست مجوزها RequestPermissions End Sub Sub ConfigureWebView WebView1.JavaScriptEnabled = True WebView1.ZoomEnabled = False WebView1.SetWebViewClient("WebViewClient") 'فعال کردن ویژگیهای پیشرفته Dim ws As WebSettings ws = WebView1.Settings ws.SetAllowFileAccess(True) ws.SetAllowFileAccessFromFileURLs(True) ws.SetAllowUniversalAccessFromFileURLs(True) ws.SetDomStorageEnabled(True) ws.SetDatabaseEnabled(True) ws.SetCacheMode(ws.LOAD_DEFAULT) 'اضافه کردن رابط JavaScript WebView1.AddJavascriptInterface("B4AInterface") End Sub Sub LoadWebTemplate Try 'بررسی وجود پوشه web در assets If File.Exists(File.DirAssets, "web/index.html") Then 'بارگذاری فایل اصلی LoadMainHTMLFile Else 'اگر پوشه web وجود ندارد، از سرور لود کن LoadFromServer End If Catch Log("Error loading web template: " & LastException) LoadFromServer End Try End Sub Sub LoadMainHTMLFile Try Dim mainHTML As String = File.ReadString(File.DirAssets, "web/index.html") 'پردازش HTML و تبدیل مسیرهای نسبی mainHTML = ProcessHTMLContent(mainHTML) 'بارگذاری در WebView WebView1.LoadHtml(mainHTML) ProgressBar1.Visible = False Catch Log("Error loading index.html: " & LastException) LoadFromServer End Try End Sub Sub ProcessHTMLContent(html As String) As String Try 'تبدیل مسیرهای نسبی به data URLs یا base64 'جایگزینی لینکهای CSS Dim cssPattern As String = "href=['""]([^'""]*\.css)['""]" Dim cssMatcher As Matcher cssMatcher = Regex.Matcher(cssPattern, html) Do While cssMatcher.Find Dim cssPath As String = cssMatcher.Group(1) Dim fullCssPath As String = "web/" & cssPath If File.Exists(File.DirAssets, fullCssPath) Then Dim cssContent As String = File.ReadString(File.DirAssets, fullCssPath) Dim replacement As String = "href=""data:text/css;charset=utf-8;base64," & _ BytesToString(cssContent.GetBytes("UTF8"), 0, cssContent.Length, "base64") & """" html = html.Replace(cssMatcher.Group(0), replacement) End If Loop 'جایگزینی لینکهای JS Dim jsPattern As String = "src=['""]([^'""]*\.js)['""]" Dim jsMatcher As Matcher jsMatcher = Regex.Matcher(jsPattern, html) Do While jsMatcher.Find Dim jsPath As String = jsMatcher.Group(1) Dim fullJsPath As String = "web/" & jsPath If File.Exists(File.DirAssets, fullJsPath) Then Dim jsContent As String = File.ReadString(File.DirAssets, fullJsPath) Dim replacement As String = "src=""data:text/javascript;charset=utf-8;base64," & _ BytesToString(jsContent.GetBytes("UTF8"), 0, jsContent.Length, "base64") & """" html = html.Replace(jsMatcher.Group(0), replacement) End If Loop 'جایگزینی تصاویر Dim imgPattern As String = "src=['""]([^'""]*\.(?:png|jpg|jpeg|gif|webp|svg))['""]" Dim imgMatcher As Matcher imgMatcher = Regex.Matcher(imgPattern, html) Do While imgMatcher.Find Dim imgPath As String = imgMatcher.Group(1) Dim fullImgPath As String = "web/" & imgPath If File.Exists(File.DirAssets, fullImgPath) Then Dim in As InputStream = File.OpenInput(File.DirAssets, fullImgPath) Dim imgBytes() As Byte = Bit.InputStreamToBytes(in) in.Close Dim ext As String = imgPath.SubString(imgPath.LastIndexOf(".") + 1).ToLowerCase Dim mimeType As String If ext.Equals("png") Then mimeType = "image/png" Else If ext.Equals("jpg") Or ext.Equals("jpeg") Then mimeType = "image/jpeg" Else If ext.Equals("gif") Then mimeType = "image/gif" Else If ext.Equals("webp") Then mimeType = "image/webp" Else If ext.Equals("svg") Then mimeType = "image/svg+xml" Else mimeType = "image/*" End If Dim replacement As String = "src=""data:" & mimeType & ";base64," & _ BytesToString(imgBytes, 0, imgBytes.Length, "base64") & """" html = html.Replace(imgMatcher.Group(0), replacement) End If Loop 'اضافه کردن base برای مسیرهای نسبی html = html.Replace("
", "