للحصول على قيمة من صفحة الويب بشكل صحيح عبر WebView في iOS، يجب عليك التأكد من أن الصفحة قد تم تحميلها بالكامل قبل استدعاء السكريبت الخاص بجافا سكريبت. يمكنك استخدام UIWebViewDelegate
لمراقبة عملية التحميل وتنفيذ السكريبت بعد تحميل الصفحة. هناك مثال على كيفية القيام بذلك:
objc@interface YourViewController () <UIWebViewDelegate>
@property (nonatomic, strong) UIWebView *webView;
@end
@implementation YourViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView.delegate = self;
[self.view addSubview:self.webView];
NSString *urlString = @"http://localhost/app/check.aspx";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:urlRequest];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('Contador').textContent"];
if (html != nil && ![html isEqualToString:@""]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Avisos Activos"
message:html
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[alert setTag:1];
[alert show];
}
}
@end
هذا الكود يتحقق من أن الصفحة قد تم تحميلها بشكل كامل (webViewDidFinishLoad
) قبل استدعاء السكريبت للحصول على قيمة من عنصر معين في الصفحة.
المزيد من المعلومات
للتأكد من أن القيمة المسترجعة من الصفحة الويب هي الصحيحة، يجب التحقق من العنصر الذي تحاول الوصول إليه (Contador
في حالتك) موجود فعلًا في الصفحة وليس مخفيًا أو غير متوفر في الوقت الذي تقوم فيه بجلب قيمته.
إذا كنت تحتاج إلى تأخير تنفيذ السكريبت الخاص بجافا سكريبت لضمان تحميل كامل الصفحة، يمكنك استخدام طرق مثل dispatch_after
لتأخير تنفيذ السكريبت بعد فترة زمنية معينة من تحميل الصفحة.
ومن الجيد أيضًا استخدام WKWebView
بدلاً من UIWebView
لأنها البديل المستحسن في iOS 8 والإصدارات اللاحقة، وتوفر أداءًا أفضل ومزايا إضافية.
هذه الخطوات يمكن أن تساعد في تحسين استجابة تطبيقك والحصول على القيم المطلوبة بشكل أكثر دقة وثباتًا.