gpt4 book ai didi

objective-c - webkit - 监听器在第二页加载时失败

转载 作者:行者123 更新时间:2023-12-03 16:29:46 24 4
gpt4 key购买 nike

我有一个用 Objective-C 编写的 Mac 客户端应用程序,它向用户显示表格中的 html 文档列表,当用户单击某一行时,它会将所选的 HTML 页面加载到 WebView 中。

每个 HTML 页面都有一个“点击”监听器,调用 Objective-C 方法。

当应用程序运行并且用户单击第一行时,一切正常。 “click”事件被捕获,并且我的 Objective-C 方法被成功调用。

但是,当用户单击第二个(或后续)记录,然后将新的 HTML 页面加载到同一个 WebView 中时,“单击”监听器永远不会触发。

如果所选记录是第一个加载的记录,则它总是可以正常工作,因此问题不在于 HTML 文件损坏。仅供引用,所有文件基本相同。

我已将问题归结为一个简单的测试应用程序。可以在这里下载 - http://dl.dropbox.com/u/160638/Work/TCL/MapTest2.zip

注意:测试应用程序向标准日志输出一条消息,因此您需要检查 Xcode 或 Console.app 中的日志窗口以查看 Objective-C 方法调用是否正常工作。顶部的按钮是成对的,首先从本地文件加载,然后以字符串形式加载 HTML 页面,最后从网站中提取 HTML 页面。

通过广泛的搜索,我猜测当我将第二个 HTML 页面加载到 WebView 中时,前一个页面会以某种方式保留,并且“单击”上的两个监听器会以某种方式发生冲突?这可能吗?

任何人都可以推荐一种加载 HTML 页面的方法,以便后续加载可以正常工作吗?有没有办法确保在加载第二个页面之前完全卸载先前加载到 WebView 中的所有页面?

如果您能提出任何建议,我们将不胜感激。

问候

达伦。

最佳答案

问题是 windowScriptObject 对于每个 HTML 文档都是唯一的。您需要执行

[[[self mapView] windowScriptObject] setValue:self forKey:@"AppDelegate"]; 

每次加载 html 时。另请注意,调用 loadHTMLString:baseURL: 后,windowScriptObject 并不立即可用。仅当 HTML 准备就绪时才完成。所以,做

[[[self mapView] mainFrame] loadHTMLString:htmlString baseURL:nil]; 
[[[self mapView] windowScriptObject] setValue:self forKey:@"AppDelegate"];

解决不了问题。相反,您应该在加载完成后在 View 的某些委托(delegate)方法中设置 windowScriptObject

现在,给我一部分你的工资。 (开玩笑:p)

关于objective-c - webkit - 监听器在第二页加载时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984567/

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