当前位置:  开发笔记 > 编程语言 > 正文

Cocoa/WebKit,具有"window.open()"JavaScript链接在Safari实例中打开

如何解决《Cocoa/WebKit,具有"window.open()"JavaScript链接在Safari实例中打开》经验,为你挑选了2个好方法。

我正在使用WebKit构建一个非常基本的Cocoa应用程序,以在其中显示Flash/Silverlight应用程序.非常基本,没有意图成为浏览器本身.

到目前为止,我已经能够在一个新的Safari实例中使用它来打开基本的html链接()

[[NSWorkspace sharedWorkspace] openURL:[request URL]];

现在我的困难是window.open()在JavaScript中使用Safari的新实例中打开一个链接.我"思考"(并且由此,我一直在破解代码并且不确定我是否真的这样做了)我通过设置WebView policyDelegate并实现它来实现这种工作

-webView:decidePolicyForNavigationAction:request:frame:decisionListener:

委托方法.然而,这导致了一些不稳定的行为.

所以简单的问题是,我需要做什么,以便在window.open()调用时,在新的Safari实例中打开链接.

谢谢

重点,我通常是.NET开发人员,并且只与Cocoa/WebKit合作了几天.



1> FireWire..:

我昨晚取得了进展,并将我的部分问题归结为一部分.

我已经在使用了webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:,我已经使用它来使用锚标记,但是当调用JavaScript时,似乎永远不会调用该方法.

但是当window.open()调用webView:createWebViewWithRequest:request被调用时,我试图强制窗口在Safari中打开,但请求始终为null.所以我永远无法读出网址.

我已经做了一些搜索,这似乎是一个已知的" 错误 ",但我还没有找到办法解决它.

根据我的理解createWebViewWithRequest,您可以创建新的webview,然后将请求的URL发送到要加载的新webView. 这是迄今为止我能找到的最佳解释.

因此,虽然很多人都指出了这个问题,但我还没有看到任何符合我需求的解决方案.我将尝试再深入研究decidePolicyForNewWindowAction一下.

谢谢!



2> Yoni Shalom..:

好吧,我正在通过创建一个虚拟webView来处理它,将它的frameLoad委托设置为一个处理的自定义类

- (void)webView:decidePolicyForNavigationAction:actionInformation :request:frame:decisionListener:

并在那里打开一个新窗口.

代码:

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request {
    //this is a hack because request URL is null here due to a bug in webkit        
    return [newWindowHandler webView];
}

和NewWindowHandler:

@implementation NewWindowHandler

-(NewWindowHandler*)initWithWebView:(WebView*)newWebView {
    webView = newWebView;

    [webView setUIDelegate:self];
    [webView setPolicyDelegate:self];  
    [webView setResourceLoadDelegate:self];

    return self;
}

- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener {
    [[NSWorkspace sharedWorkspace] openURL:[actionInformation objectForKey:WebActionOriginalURLKey]];
}

-(WebView*)webView {
    return webView;
}

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有