NSString使用WebView Innerhtml返回空

时间:2013-08-07 10:42:32

标签: objective-c macos webview nsstring

我不是Objective-c的英雄所以请在我学习握手的时候陪我。虽然我对Javascript有很好的了解,但Mac OSX开发似乎很难。

我正在创建一个依赖于HTML5的应用程序,我的目标是“简单地”通过运行Javascript函数来保存特定div的内容。我一直在寻找各地,我似乎无法找到一个很好的例子来帮助我进一步甚至开始。我希望你们能帮助我指出正确的方向。

最近,Ben Taylor在twitter上给了我启动代码。

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:@"document.getElementById('NSSidebar').innerHTML"];
NSLog(@"contents:%@",html);

日志返回空。现在可能是因为没有正确加载webview以便让字符串找到'some-element'div。我目前的代码是:

- (void)applicationDidFinishLaunching:()myWebView {

    NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index"
                                                         ofType:@"html"
                                                    inDirectory:@""];

    NSURL* fileURL = [NSURL fileURLWithPath:filePath];
    NSURLRequest* request = [NSURLRequest requestWithURL:fileURL];
    [[webView mainFrame] loadRequest:request];

    NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('NSSidebar'.innerHTML"];
    NSLog(@"contents:%@",html);

}

我希望有人可以帮我指出正确的方向。如果有重复的帖子 - 我道歉并且我将删除该主题。

2 个答案:

答案 0 :(得分:0)

两个错误:

  1. 您遇到语法错误:缺少右括号。
  2. 您需要在返回的对象上调用.toString()
  3. 像这样:

    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('NSSidebar').innerHTML.toString()"];
    

答案 1 :(得分:0)

我使用您的代码和一个带有相同ID的菜单侧栏的索引文件设置了一个测试项目。

我得到的结果相同。

然后我看了一下苹果Webkit Objective -C Programming Guide

其中有几个关于如何使用框架获取“location.href”的示例 windowScriptObject

我将它改编为getElement ..它可以工作。

    id win = [_webView windowScriptObject];


 NSString *html = [win evaluateWebScript:@"document.getElementById(\"NSSidebar\").innerHTML"];

     NSLog(@"html:\n%@",html);

    NSString *htmlText = [win evaluateWebScript:@"document.getElementById(\"NSSidebar\").innerText"];

    NSLog(@"htmlText:\n %@",htmlText);