【问题标题】:Problem while displaying content in WebView in Leopard在 Leopard 的 WebView 中显示内容时出现问题
【发布时间】:2010-07-21 11:54:35
【问题描述】:

我制作了一个示例应用程序,包括:WebView(显示 URL 的内容)、文本字段(包含 URL)、按钮(在 WebView 中加载 URL)。

我使用这种方法在 WebView 中显示内容:

- (IBAction)displayAction:(id)sender{
    NSString *liveStreamLink = [[NSString alloc] initWithString:[livestreamLinkTextField stringValue]];
    [[livestreamDisplayView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:liveStreamLink]]];
}

我在 Leopard 和 Snow Leopard 中都做了这个应用程序。

正常的链接,如 - https://stackoverflow.com/ 在两个应用程序中都可以正确打开,但是当我尝试链接如 - http://www.xyz.com/tools/gauges/livestream.php?data=123456,(注意:此链接返回一个图表),在豹子开发的应用程序中,它导致崩溃。在 Snow Leopard 中开发的应用程序适用于所有类型的链接。

谁能建议我这可能是什么原因以及解决它的一些解决方案?

堆栈跟踪如下:

0   0x928252e6 in Debugger
1   0x1b7e8c15 in dyld_stub_sprintf
2   0x1b7e8ecf in NP_Initialize
3   0x90f0599f in -[WebNetscapePluginPackage _tryLoad]
4   0x90f054d7 in -[WebNetscapePluginPackage load]
5   0x90f0a8af in -[WebNetscapePluginDocumentView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:]
6   0x90ef41da in WebFrameLoaderClient::createPlugin
7   0x930bd908 in WebCore::FrameLoader::loadPlugin
8   0x936ae0da in WebCore::FrameLoader::requestObject
9   0x930bc409 in WebCore::RenderEmbeddedObject::updateWidget
10  0x92f32e65 in WebCore::FrameView::updateWidgets
11  0x92f329c1 in WebCore::FrameView::performPostLayoutTasks
12  0x92f22e33 in WebCore::FrameView::layout
13  0x9306f72b in WebCore::Timer<WebCore::FrameView>::fired
14  0x92f9e94e in WebCore::ThreadTimers::sharedTimerFiredInternal
15  0x92f9e822 in WebCore::ThreadTimers::sharedTimerFired
16  0x93860624 in WebCore::timerFired
17  0x9621a70b in __CFRunLoopRun
18  0x96218094 in CFRunLoopRunSpecific
19  0x96217ec1 in CFRunLoopRunInMode
20  0x96e48f9c in RunCurrentEventLoopInMode
21  0x96e48d51 in ReceiveNextEventCommon
22  0x96e48bd6 in BlockUntilNextEventMatchingListInMode
23  0x902b0a89 in _DPSNextEvent
24  0x902b02ca in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
25  0x9027255b in -[NSApplication run]
26  0x9026a5ed in NSApplicationMain
27  0x000029ee in start at ESTableView.m:1278

【问题讨论】:

  • 说它会导致崩溃是不够的。发布堆栈跟踪。
  • 另外,第一行(创建 liveStreamLink 的地方)完全没有必要。您可以直接在 -URLWithString: 中传递 [livestreamLinkTextField stringValue] ... 不必要的代码只是意味着更多的出错机会。在保持可读性的同时保持尽可能简单。
  • 问题现在包含崩溃的堆栈跟踪

标签: cocoa webview


【解决方案1】:

我将冒险猜测这不是你的错,而是早期版本的 WebKit 的错。这种猜测的原因是什么?

  1. 它在 Snow Leopard 上运行良好,但在 Leopard 上运行良好。

  2. 崩溃完全在 WebCore 中,而不是您的代码中。

  3. 第 3、4 和 5 行显示 WebCore 正在为您正在加载的 URL 实例化一个插件,而这似乎就是发生崩溃的地方。

  4. Snow Leopard 中包含的 WebKit 以不同方式处理插件(将它们隔离,因此它们的崩溃不会影响整个事情)但这种额外的关注并不是 Leopard 中 WebKit 的一部分。

    李>

【讨论】:

  • 感谢您的猜测......但这意味着......我无法解决它:(
  • 另外,正常的链接在这个应用程序中工作正常......所以我真的想知道为什么它会因为特定的链接而崩溃!
【解决方案2】:

我发现每当它崩溃时,它都会显示 msg:Debugger() 被调用。所以我检查了 Xcode 运行设置,发现 - 选择了 Stop on Debugger()/DebugStr()。当我取消选择它并重新执行应用程序时,它工作并且没有崩溃。

任何人都可以验证关闭:在 Debugger()/DebugStr() 上停止,不会造成任何问题吗?

谢谢,

莫纳吉

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2016-11-08
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多