stringByEvaluatingJavaScriptFromString问题
我正在尝试使用这行代码stringByEvaluatingJavaScriptFromString问题,javascript,html,objective-c,string,file,Javascript,Html,Objective C,String,File,我正在尝试使用这行代码 [webView stringByEvaluatingJavaScriptFromString:@"test();"]; 但它不起作用。我有多个javascript文件,我不知道如何告诉程序我正在尝试使用哪一个。正在从本地html文件加载这些文件。如果有人知道我会多么感激它,或者有人知道使用objective c调用javascript的另一种方法 谢谢 克林顿您发布的代码: [webView stringByEvaluatingJavaScriptFromString
[webView stringByEvaluatingJavaScriptFromString:@"test();"];
但它不起作用。我有多个javascript文件,我不知道如何告诉程序我正在尝试使用哪一个。正在从本地html文件加载这些文件。如果有人知道我会多么感激它,或者有人知道使用objective c调用javascript的另一种方法
谢谢
克林顿您发布的代码:
[webView stringByEvaluatingJavaScriptFromString:@"test();"];
这是正确的。我能想到的唯一问题是,由于某种原因,包含test
函数的javascript文件没有被加载
试试这个:
NSString* result = [webView stringByEvaluatingJavaScriptFromString:@"document.title;"];
并查看是否在结果中获得值
编辑:
如果您加载的本地HTML文件包含对本地javascript文件的引用,则最有可能导致此类错误行为的原因是在初始化UIWebView
时未指定baseURL
,例如:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
这将允许您正确加载资源文件夹中可用的javascript文件:
NSString* basePath = [[NSBundle mainBundle] bundlePath];
[_label loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:basePath]];
如果您提供更多关于HTML/javascript文件组织方式的详细信息,我可以进一步帮助您(如果我的假设是正确的)
编辑2:
(在下文中,我假设您使用的是MacOS,但我知道这里没有说明这一点;如果您使用的是iOS,则类似的推理也适用,但细节会有所不同)
首先,您的委托方法webView:didFinishLoadForFrame:
是否被调用?还是调用了–webView:didFailLoadWithError:forFrame:
正如另一个答案中所述,您只能在webView加载后执行javascript
另一方面,我很确定您没有正确地传递baseURL
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"allFiles"];
htmlData = [NSData dataWithContentsOfFile:htmlPath];
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:htmlPath]];
在这个代码段中,baseURL
是您的/allFiles/index.html
文件;您只需将/allFiles
传递给baseURL
,如果其余的都可以(意思是didfishload
的东西,以及引用脚本的html文件以及脚本目录的相对路径),那么它应该可以工作
现在,我无法建议一种方法来正确找到“allFiles”目录的路径(这里很晚了),但为了进行测试,您可以修剪当前的htmlPath
,以从中删除“index.html”子字符串…很可能您正在加载html之前尝试运行此操作WebView
异步加载,即使文件是本地的。您需要实现WebFrameLoadDelegate
并从webView:didFinishLoadForFrame:
等待,然后再尝试使用嵌入式JavaScript。结果为空。我使用了您的代码行加上'NSLog(@“result=%@”,result);'如何初始化UIWebView?我加载本地html,如NSString*htmlPath=[[NSBundle mainBundle]pathForResource:@“index”of type:@“html”inDirectory:@“allFiles”];htmlData=[NSData DATA WITH CONTENTS OFFILE:htmlPath];[webView加载数据:htmlData MIMEType:@“text/html”textcodengname:@“UTF-8”baseURL:[NSURL URLWithString:htmlPath]]/var/mobile/Applications/0122EB17-C83D-4EED-948D-75a681390ee/appName.app/allFiles/index.html