gpt4 book ai didi

javascript - 使用 webview 方法从 Objective C 中调用 javascript 函数

转载 作者:行者123 更新时间:2023-11-28 07:40:47 26 4
gpt4 key购买 nike

我正在尝试通过 Objective C 调用 javascript 函数

我遵循的步骤:

在 HTML 页面中:

<!DOCTYPE html>
<html>
<head>
<script>
function init()
{
alert("Hello Contraceptive_Quiz!");
setTimeout(function(){destroy()},1000);
}
function destroy()
{
alert("calling destroy Contraceptive_Quiz!");
}
</script>
</head>
<body>
</body>
</html>

在我使用过的ObjectiveC.m文件中,

在我的应用程序包 wwwfilePath 文件夹中存在:

wwwfilePath结构包含:www/IYG_G8_L05/IYG_G8_L05_Directory/IYGindex1.html

这里,在这个结构中包含 www/IYG_G8_L05/许多子文件夹

www/IYG_G8_L05/IYG_G8_L05_Directory1

www/IYG_G8_L05/IYG_G8_L05_Directory2

www/IYG_G8_L05/IYG_G8_L05_Directory3

所以,我需要将html页面中的多个内容一一加载

第一次加载IYG_G8_L05_Directory1,然后下一步...

- (void)viewDidLoad{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IYGindex1" ofType:@"html" inDirectory:wwwfilePath];
NSURL *htmlurl = [[NSURL alloc]initFileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:htmlurl];
[_contentWebView loadRequest:request];
}

在 webview 委托(delegate)方法中:

** 在 Objective C 中调用 javascript 函数**

-(void) webViewDidFinishLoad:(UIWebView *)webView {
NSString *jsString = [[NSString alloc] initWithFormat: @"init()"];
[_contentWebView stringByEvaluatingJavaScriptFromString:jsString];
}

这里,init()方法将会执行,并且由于在html页面中调用了setTimeout()函数,所以也会执行destroy()方法。

我的问题是:一旦 destroy() 方法执行,我如何加载下一个 wwwfilepath 即 IYG_G8_L05_Directory2 它应该以动态方式调用。

请告诉我们如何解决?

最佳答案

解决方案1:要动态加载 HTML 文件的内容,您可以尝试使用 XMLHttpRequest() 进行 AJAX 调用。

在下面的代码中,一个 url 被发送到 loadHTMLURL() 函数,其中返回加载的内容。

function destroy()
{
alert("calling destroy Contraceptive_Quiz!");
document.createElement("body").innerHTML = loadHTMLURL("IYG_G8_L05_Directory1/NEW_HTML.html");
}
function loadHTMLURL(href)
{
var xmlHTTPObj = new XMLHttpRequest();
xmlHTTPObj.open("GET", href, false);
xmlHTTPObj.send();
return xmlHTTPObj.responseText;
}

我还没有运行过这段代码。因此请仔细检查 html 文件 url 并尝试使用您的代码。

==================================

解决方案2:

Objective-c 代码:

NSTime *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(_timerFired:) userInfo:nil repeats:YES];
- (void)_timerFired:(NSTimer *)timer {
NSString *function = [[NSString alloc] initWithFormat: @"destroy(%@)", @"IYG_G8_L05/IYG_G8_L05_Directory1"];
NSString *result = [webView stringByEvaluatingJavaScriptFromString:function];
}

Javascript代码:

function destroy(fileNameWithURL)
{
alert("calling destroy Contraceptive_Quiz!");
document.createElement("body").innerHTML = loadHTMLURL(fileNameWithURL);
}

上面的代码可能对您有帮助。

关于javascript - 使用 webview 方法从 Objective C 中调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com