stringByEvaluatingJavaScriptFromString 返回空字符串,但在 Safari 中返回完整字符串
Posted
技术标签:
【中文标题】stringByEvaluatingJavaScriptFromString 返回空字符串,但在 Safari 中返回完整字符串【英文标题】:stringByEvaluatingJavaScriptFromString returns empty string but in safari returns a full string 【发布时间】:2014-07-02 19:01:13 【问题描述】:我正在使用 js 函数调用 ([self.webview stringByEvaluatingjavascriptFromString:@"someMethod()"
] 调用 stringByEvaluatingJavaScriptFromString
。
在 iphone 上,它返回一个 empty 字符串,但是当我在 safari 中使用 "Develop -> myphone -> index.html"
进行调试时,相同的调用会按预期返回正确的结果。
我还应该指出,带有该方法的 JS 文件与整个“网站”一样位于设备本地
我如何检查这个?
【问题讨论】:
【参考方案1】:首先,您需要确保webView
已正确加载,因此在通知您使用UIWebViewDelegate
方法完成后,请执行任何代码。然后,您必须确保您位于正确的 URL 以使该 JS 方法起作用(您可能会被重定向到移动站点(在 URL 中查找 .m))。如果你是,可能没有任何帮助,所以你必须在移动网站上测试你将在 iPhone 上使用的任何 JS,方法是在你的计算机中打开相同的 URL 并环顾四周。运行这个测试:
#import "MyWebViewController.h"
@interface MyWebViewController() <UIWebViewDelegate>
// If you have a storyboard
@property (nonatomic, weak) IBOutlet UIWebView *webView;
// If you don't have a storyboard
// @property (nonatomic, strong) UIWebView *webView;
@end
@implementation MyWebViewController
- (void)viewDidLoad
// If you don't have a storyboard
// self.webView = [[UIWebView alloc] initWithFrame:self.view.frame];
// [self.view addSubview:self.webView];
self.webView.delegate = self;
- (void)webViewDidFinishLoad:(UIWebView *)webView
NSLog(@"The URL of the site we are on is: %@", webView.request.URL.absoluteString);
NSLog(@"Now, I'll evaluate the JS: %@", [webView stringByEvaluatingJavaScriptFromString:@"someMethod()"]);
@end
【讨论】:
我正在使用 [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"htmldir"] 加载本地保存的 html 和 javascript - 并且页面正在根据正确加载到委托方法 @AvnerBarr 委托方法有点谎言,因为webViewDidFinishLoad
被多次调用。为了得到最后的负载,检查这个答案:***.com/a/2796540/2770572
它调用了一次 - 我想提一下 html 和 java 脚本是本地的
还要提一下,我是在页面加载完成后调用javascript方式
@AvnerBarr 什么是JS,什么是URL?以上是关于stringByEvaluatingJavaScriptFromString 返回空字符串,但在 Safari 中返回完整字符串的主要内容,如果未能解决你的问题,请参考以下文章