访问 DOM Webkit Objective C

2023-12-19

熟悉 webkit 的人能否解释一下或为我指出正确的方向,为什么以下代码不起作用

我想做的是加载一个页面,让 webkit 解析它并简单地打印出标题。

这是我所得到的:

#include <iostream>
#include <WebKit/WebKit.h>

using namespace std;

/*
 Seek Help
*/
int main (int argc, char * const argv[]) {      
    NSAutoreleasePool    *autoreleasepool = [[NSAutoreleasePool alloc] init];

     WebFrame * mainFrame;
     WebView * view = [[WebView alloc] initWithFrame: NSMakeRect (0,0,640,480)];

    mainFrame = [view mainFrame];
    NSString * url = @"http://test.com";
    [[view mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];

    NSString * data = @"<html><head><title>testing</title></head><body>tester</body></html>";
    [[view mainFrame] loadHTMLString:data baseURL: nil];

    // NSString * urlString = [[NSString alloc] initWithUTF8String:"<html><head><title>Hello World</title></head><body><p>My first Web page.</p></body></html>"];

    //[[view mainFrame] loadHTMLString:urlString baseURL:nil];    

    NSString * outerHtml = [(DOMHTMLElement *)[[[view mainFrame] DOMDocument] documentElement] innerHTML];

     cout << "Html: " << [outerHtml UTF8String] << endl;

    NSString * title = [view mainFrameTitle];

    cout << "title: " << [title UTF8String] << endl;

    [autoreleasepool release];

     return 0;
}

输出是 html 且标题为空白

感谢您的阅读


它不起作用,因为 WebKit 依赖 RunLoop 来加载内容,即使它只是静态内容。

您应该添加一个标准运行循环,例如:

while (!done) {
    pool = [[NSAutoreleasePool alloc] init];
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                             beforeDate:[NSDate distantPast]];
    [pool release];
}

并创建一个设置为 WebFrameLoadDelegate 的自定义类(webView.frameLoadDelegate = thatObject),并且在- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame回调你应该能够访问 DOM。另外,当负载完成时,设置done标记为“是”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 DOM Webkit Objective C 的相关文章

随机推荐

  • Android Studio Manifest 包名合并错误

    What went wrong Execution failed for task app processDebugManifest 清单合并失败 AndroidManifest xml 3 5 40 位置处的包名称 应至少包含一个 点 字
  • 绑定到祖先的 Datacontext

    最好先向您展示我的代码 然后再提出问题
  • 将 NOT NULL 约束添加到列

    我正在使用 PHPMyAdmin 并尝试将 NOT NULL 约束添加到表的列中 PHPMyAdmin 接受我的以下查询 ALTER TABLE wall MODIFY token message varchar 40 NOT NULL 但
  • 从命令行调试 iPhone 应用程序

    我可以从 XCode 执行此操作 但我希望能够从命令行启动 iPhone 应用程序 在设备上 是否可以 为什么 因为我想捕获一些半自动测试的输出 我猜我需要使用 NSLog 输出的调试版本 但我也有兴趣了解将 NSLog stdio 数据返
  • Facebook 停止显示文章:作者

    看起来 Facebook 在过去几天改变了一些东西 我注意到文章 作者信息不再显示 文章 发布者仍然有效 https developers facebook com docs reference opengraph object type
  • 具有非可选属性的类符合具有可选属性的协议

    如果我有一个具有可选属性的协议 以及一个需要符合协议的类 该协议已经具有相同的属性 但作为非可选属性 我如何使该类符合协议 protocol MyProtocol var a String get set class MyClass var
  • 如何让 Meteor.Call 返回模板值?

    我试过了了解这篇关于这个概念的文章 https stackoverflow com questions 10379445 how to get the result of a meteor call function in a templa
  • Nifi 中并行和顺序处理的等待通知

    我有一个要求 我需要并行执行 4 个作业 并且当在所有 4 个处理器中并行完成相同的项目作业时 然后触发下一个处理器 为此我使用了等待通知 流程就像 4个并行作业 gt notify 释放信号标识符 itemid 信号计数器名称 proce
  • Haskell 程序中比其他语言更容易出现哪些错误?

    备受推崇的功能之一是 如果一个程序可以编译 那么它很可能大部分都是正确的 比用不太复杂或严格的类型系统的语言编写的程序更是如此 也就是说 Haskell 是一个将运行时错误转换为编译器错误的系统 我想知道 用 Haskell 编程是否会出现
  • Flutter - 有状态小部件在切换选项卡时不会保存计数器状态

    我正在学习 flutter 正在使用 tabBars 但在保存状态时遇到问题 我在下面列出了我的问题的一个小工作示例 基本上 有一个按钮和一个状态计数器 当我单击按钮时 我看到文本字段正确更新 但是 当我切换到不同的选项卡并返回时 文本字段
  • 修改HAProxy Lua库路径

    我正在尝试从 HAProxy 加载 Lua 脚本 在 Lua 脚本中 以下行导致错误 local http require socket http 最初我收集自journalctl xe输出表明该库未安装 我安装它使用luarocks in
  • 如何使用tensorflow进行k折交叉验证?

    我正在关注张量流的 IRIS 示例 https github com tensorflow tensorflow tree master tensorflow examples tutorials monitors 我现在的情况是 我将所有
  • 用于开始 Java 源文件的有效关键字

    到目前为止 我知道这些关键字对于开始 java 源文件是有效的 class public import package interface and final 评论补充 abstract strictfp enum 还有吗 感谢所有超级快速
  • 如何在 R 中编写最大似然例程?

    我想对我创建的数据样本运行一些最大似然代码 这是我到目前为止所拥有的 library maxLik data lt replicate 20 rnorm 100 logLikFun lt function param mu lt param
  • 同步数据库 Mysql SQLite [重复]

    这个问题在这里已经有答案了 可能的重复 如何将Android手机上的SQLite数据库与服务器上的MySQL数据库同步 https stackoverflow com questions 6511402 how to sync sqlite
  • Flutter 使用分享意图在 YouTube 上分享视频

    When press on share button It opens the sharing dialog box as shown below When press on youtube it share video on youtub
  • 使用 PHP 脚本发送和接收短信?

    Can a PHP脚本 可以与 MySQL 数据库一起使用 发送和 或接收短信使用某种服务器端解决方案 任何特殊的服务器端应用 或特殊的hardware必需的 以及兼容性 视窗 Linux 像这样的公司还有很多Esendex http ww
  • python 相当于 PHP $_SERVER 是什么?

    我找不到与 PHP SERVER 等效的 python 有没有 或者说 有哪些方法可以带来同等的结果 提前致谢 Using mod wsgi 我会推荐它而不是 mod python 说来话长 但相信我 你的应用程序通过了环境变量例如 def
  • 如何设置 MySQL 进程或线程的最大数量?

    ps axuw grep mysql仅指示 MySQL 进程 但如果我运行 htop 我可以看到 10 行 每一行都有一个单独的 PID 所以我想知道它们是否是由于某种原因我无法使用 ps 看到的线程或进程 在我的开发机器上尝试将它们限制为
  • 访问 DOM Webkit Objective C

    熟悉 webkit 的人能否解释一下或为我指出正确的方向 为什么以下代码不起作用 我想做的是加载一个页面 让 webkit 解析它并简单地打印出标题 这是我所得到的 include