Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
stringByEvaluatingJavaScriptFromString问题_Javascript_Html_Objective C_String_File - Fatal编程技术网

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