رفتن به مطلب
  • 0

مشکل عجیب در استفاده از کتابخانه JSInterface


fun_code

سوال

سلام دوستان

 

من در برنامه درون پرداختم که شخصی هم هست از کتابخانه های JSInterface ,SslErrorWebView,WebViewExtras استفاده میکنم.

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

 

پس از خرید و اجرای دستورات زیر باید تابع processHTML فراخوانی بشه ، اما فراخوانی نمیشه !!! (2 دستور toast و log قرار دادم اما اجرا نمیشن)

		Dim jsStatement As String 
		jsStatement = "B4A.CallSub('processHTML', true, document.documentElement.outerHTML)" 
		myInterface.execJS(vwPayment, jsStatement)

پس از گذشت 40 الی 60 ثانیه هم پیغام زیر رو بصورت toast نمایش میده...

android.system.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)

اومدم کل پروژه رو در یک پروژه جدید کپی کردم و درست شد. (جالب اینجاست نام پوشه پروژه رو به نام قبلی تغییر میدادم دوباره خراب می شد!)

اما نسخه های جدید که دادم دوباره خراب شده... هر چی هم دوباره کل پروژه رو در یک پروژه جدید کپی میکنم درست نمیشه :(

 

عجیبه که فقط این برنامه هم مشکل داره...نمیدونم چرا بقیه برنامه ها اینجوری نشدن و نمیشن !

لطفا راهنماییم کنید.

ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام 

این مشکل قبلا برای من هم پیش اومده اما نمیدونم علت مشکل شما هم مثل من باشه یا نه 

 

برنامه را روی چه حالتی کامپایل می کنید ؟ Release یا Release(obfuscated)l یا Debug ؟

 

اگه روی غیر از حالت Release(obfuscated)l کامپایل می کنید راه حل زیر برای مشکلتون جواب نمیده اما اگه روی حالت Release(obfuscated)l برنامه تون رو کامپایل می کنید راه حل زیر باید جواب بده :

 

اسم تابع processHTML  به process_HTML تغییر بدید یعنی باید به اسم تابعتون یک آندرلاین اضافه کنید چون در حالت  Release(obfuscated)l اسم همه ی تابع ها به صورت خودکار به اسم های نامفهوم تبدیل میشه به جز تابع هایی که در اسمشون آندرلاین وجود داره 

 

حالا وقتی ما دستور فراخوانی  تابع processHTML  رو در داخل متد  execJS  و در داخل یک استرینگ می دهیم بیسیک این فراخوانی رو در تبدیل اسم تابع ها به اسم های نامفهوم تشخیص نمیده و اسم تابع ما رو عوض می کنه  و مثلا اسم تابع processHTML  رو میزاره VVVVVVVV1

حالا اتفاقی که می افته اینه که برنامه میاد در متد execJS تابع processHTML رو فراخوانی کنه و تابعی هم با همچین اسمی وجود نداره پس این تابع فراخوانی نمیشه و کدهای مورد نظر ما هم اجرا نمیشن .

 

سعی کردم قشنگ و ساده توضیح بدم اما فک کنم نشد :wacko2:   ببخشید  :DD: 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

این مشکل قبلا برای من هم پیش اومده اما نمیدونم علت مشکل شما هم مثل من باشه یا نه 

 

برنامه را روی چه حالتی کامپایل می کنید ؟ Release یا Release(obfuscated)l یا Debug ؟

 

اگه روی غیر از حالت Release(obfuscated)l کامپایل می کنید راه حل زیر برای مشکلتون جواب نمیده اما اگه روی حالت Release(obfuscated)l برنامه تون رو کامپایل می کنید راه حل زیر باید جواب بده :

 

اسم تابع processHTML  به process_HTML تغییر بدید یعنی باید به اسم تابعتون یک آندرلاین اضافه کنید چون در حالت  Release(obfuscated)l اسم همه ی تابع ها به صورت خودکار به اسم های نامفهوم تبدیل میشه به جز تابع هایی که در اسمشون آندرلاین وجود داره 

 

حالا وقتی ما دستور فراخوانی  تابع processHTML  رو در داخل متد  execJS  و در داخل یک استرینگ می دهیم بیسیک این فراخوانی رو در تبدیل اسم تابع ها به اسم های نامفهوم تشخیص نمیده و اسم تابع ما رو عوض می کنه  و مثلا اسم تابع processHTML  رو میزاره VVVVVVVV1

حالا اتفاقی که می افته اینه که برنامه میاد در متد execJS تابع processHTML رو فراخوانی کنه و تابعی هم با همچین اسمی وجود نداره پس این تابع فراخوانی نمیشه و کدهای مورد نظر ما هم اجرا نمیشن .

 

سعی کردم قشنگ و ساده توضیح بدم اما فک کنم نشد :wacko2:   ببخشید  :DD: 

 

یافتم

مشکل مسخره ای بود ، به سختی حل شد.

البته مطمئن نیستم ریشه مشکل و پیدا کردم.

اما با تغییر تم اون اکتویتی ، خداروشکر فعلا مشکل برطرف شد!!!

اگر با این مشکل مواجه شدین تست کنید...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...