标签: uiwebview

如何安全地关闭viewWillDisappear中的加载UIWebView?

我有一个包含UIWebView的视图,它正在加载一个谷歌地图(所以很多javascript等).我遇到的问题是,如果用户在Web视图加载完之前点击导航栏上的"后退"按钮,我不清楚如何整理地告诉Web视图停止加载然后释放它,而不是获取发送到解除分配的实例的消息.我也不确定网页视图是否喜欢它的容器视图在它完成之前消失(但是如果用户在加载之前点击后退按钮,我别无选择).

在我的viewWillDisappear处理程序中我有这个

map.delegate=nil;
[self.map stopLoading];
Run Code Online (Sandbox Code Playgroud)

这似乎可以处理大多数情况,因为nil'ing委托停止它将didFailLoadWithError发送到我的视图控制器.但是,如果我在视图的dealloc方法中释放Web视图,有时(间歇性地)我仍会收到发送到解除分配的实例的消息,这似乎与在实际页面中运行的javascript有关,例如:

-[UIWebView webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]: message sent to deallocated instance 0x4469ee0
Run Code Online (Sandbox Code Playgroud)

如果我只是不发布webview,那么我不会收到这些消息,但我想我正在泄漏webview.

如果我没有发送'stopLoading'消息,只是在viewWillDisappear中发布webview,那么我会看到如下消息:

/SourceCache/WebCore/WebCore-351.9.42/wak/WKWindow.c:250 WKWindowIsSuspendedWindow:  NULL window.
Run Code Online (Sandbox Code Playgroud)

可能相关,我有时(再次完全断断续续)得到一个丑陋的heisenbug,点击其他视图的导航栏上的后退按钮将弹出标题,但不是视图.换句话说,我在堆栈上留下了视图n的标题,但是显示的视图仍然是视图n + 1(结果是你被困在这个屏幕上并且无法返回到根视图 - 你可以去其他方向,即推送更多视图并弹回到没有正确弹出的视图,只是不到根视图.唯一的出路是退出应用程序).在其他时候,相同视图上的推送和弹出的相同序列工作正常.

这个特别的一个让我疯了.我认为它可能与视图在加载Web视图之前消失有关,即在这种情况下我怀疑它可能会在内存上乱写并混淆视图堆栈.或者,这可能是完全不相关的,而且是其他地方的错误(我从来没有能够在调试构建模式下重现它,只有当我无法使用gdb观看它时才会发布版本设置:-).从我的调试运行开始,我认为我不会过度发布任何内容.而且我似乎只能触发它,如果在某些时候我已经点击了具有Web视图的视图,并且在此之后不会立即发生.

iphone cocoa-touch uiwebview

31
推荐指数
1
解决办法
2万
查看次数

删除UIWebView Shadow?

有谁知道是否可以删除放置在UIWebView窗口上的阴影?

示例:http://uploadingit.com/files/1173105_olub5/shadow.png

如果它可能你怎么做?

谢谢

iphone shadow uiwebview

31
推荐指数
5
解决办法
2万
查看次数

如何从Javascript调用Objective C方法并将数据发送回iOS中的Javascript?

在iOS中,如何从Javascript中调用Objective-C方法UIWebView并让它将数据发送回Javascript?我知道这可以使用Webkit库在OS X上完成,但是这可以在iOS上实现吗?PhoneGap如何实现这一目标?

javascript objective-c uiwebview ios

31
推荐指数
3
解决办法
4万
查看次数

在UIWebview中添加了空白 - 删除了iOS7和iOS8中的UIWebView空白

我正在加载本地html文件,因为iOS7在UIWebView上面添加了空白区域.(我无法发布图像,因为我没有足够的点.) 图像可以在这里看到 - 从iPhone模拟器拍摄,uiwebview被黑色包围框架,html内容是灰色的,但上面加了白色

我试图使用调整缩放

[webView stringByEvaluatingJavaScriptFromString:@"document. body.style.zoom = 5.0;"];
webView.scalesPageToFit = NO;
Run Code Online (Sandbox Code Playgroud)

我也尝试删除白色间距:

 NSString *padding = @"document.body.style.margin='0';document.body.style.padding = '0'";
[webView stringByEvaluatingJavaScriptFromString:padding];
Run Code Online (Sandbox Code Playgroud)

仍然没有运气.在桌面Chrome浏览器中没有空格.html文件是Google Swiffy文件 - 包含html和JSON.

编辑:更新图像

objective-c uiwebview ios7 ios8

31
推荐指数
2
解决办法
2万
查看次数

使用UIDocumentInteractionController显示presentPreviewAnimated:通过UIWebView

我想拦截来自UIDocumentInteractionController的任何支持的文件类型的点击,并在模态视图中显示它们(由presentPreviewAnimated:UIDocumentInteractionController 的方法提供).此模态视图还提供"Open In ..."功能,以在设备上的其他兼容应用程序中打开任何这些文档.下面的代码将拦截这些点击,检测URL字符串是否具有任何适当的后缀,加载此数据,将其写入目录,再次读取它,最后使用该presentPreviewAnimated:方法使用数据.我必须首先将数据写入文件系统,因为UIDocumentInteractionController需要本地数据,不能直接使用URL中的数据(据我所知).

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
 if (navigationType == UIWebViewNavigationTypeLinkClicked) {
  ILog(@"URL loading for NavigationTypeLinkClicked: %@", request.URL.absoluteString);

  if ([request.URL.absoluteString hasSuffix:@"pdf"] || [request.URL.absoluteString hasSuffix:@"doc"] || [request.URL.absoluteString hasSuffix:@"xls"] || [request.URL.absoluteString hasSuffix:@"ppt"] || [request.URL.absoluteString hasSuffix:@"rtf"] || [request.URL.absoluteString hasSuffix:@"key"] || [request.URL.absoluteString hasSuffix:@"numbers"] || [request.URL.absoluteString hasSuffix:@"pages"]) {
   if (NSClassFromString(@"UIDocumentInteractionController")) {
                NSArray *parts = [request.URL.absoluteString componentsSeparatedByString:@"/"];
                self.previewDocumentFileName = [parts lastObject];
                NSLog(@"The file name is %@", previewDocumentFileName);

    // Get file online
                NSData *fileOnline = [[NSData alloc] initWithContentsOfURL:request.URL];

    // …
Run Code Online (Sandbox Code Playgroud)

iphone uiwebview

30
推荐指数
1
解决办法
2万
查看次数

UIWebView链接单击

在我的应用程序中,某个HTML页面加载在webview中.我需要点击某些标签,如"neuron",并应在另一个视图中显示其描述.如何在webview中获取标签点击并单击标签?

iphone uiwebview

30
推荐指数
3
解决办法
3万
查看次数

加载本地资源时,UIWebView和WKWebView之间有什么区别

我想用webView加载本地资源.我用UIWebView和WKWebView构建了一个演示,用下面的代码做一些测试.

    let uiWebView = UIWebView(frame: self.view.bounds)
    self.view.addSubview(uiWebView)

    let wkWebView = WKWebView(frame:CGRect(x: 0, y: 400, width: 500, height: 500))
    self.view.addSubview(wkWebView)

    let path = Bundle.main.path(forResource:"1", ofType: "png")

    guard let realPath = path else {
        return
    }

    let url = URL(string: realPath)
    let fileUrl = URL(fileURLWithPath: realPath)

    if let realUrl = url {
        uiWebView.loadRequest(URLRequest(url:realUrl))
        wkWebView.load(URLRequest(url:realUrl))
    }


  // uiWebView.loadRequest(URLRequest(url:fileUrl))
  // wkWebView.load(URLRequest(url:fileUrl))
Run Code Online (Sandbox Code Playgroud)

uiWebView可以加载资源,但wkWebView不能.但是,如果我使用

  uiWebView.loadRequest(URLRequest(url:fileUrl))
  wkWebView.load(URLRequest(url:fileUrl))
Run Code Online (Sandbox Code Playgroud)

uiWebView和wkWebView都能很好地工作.我很困惑,任何人都可以解释一下:我不应该为本地资源使用URL(字符串:realPath)吗?但是为什么UIWebView可以使用它呢?

uiwebview ios wkwebview

30
推荐指数
1
解决办法
3万
查看次数

使用Javascript和处理onorientationChange的iPhone UIWebView本地资源

我正在尝试从iPhone应用程序的本地资源中提供HTML Javascript和CSS内容,而且我在处理onOrientationChange事件和包括外部Javascript时遇到了问题.

我似乎能够正确地链接CSS但不是javascript.我正在尝试使用以下处理onOrientationChange的示例(如何构建iPhone网站),但我正在从我的应用程序的NSBundle mainBundle提供网页.

我尝试将一个javascript函数附加到body.onorientationchange和window.onorientationchange,但是当从本地(或远程)从UIWebView提供时,它都不起作用,但是如果我正在使用iPhone Safari,它就可以工作.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>How to build an iPhone website</title>

    <meta name="author" content="will" />
    <meta name="copyright" content="copyright 2008 www.engageinteractive.co.uk" />
    <meta name="description" content="Welcome to engege interactive on the iPhone!" />
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
    <link rel="apple-touch-icon" href="images/template/engage.png"/>

    <style type="text/css">
        @import url("iphone.css");
    </style>
    <!--
    <script type="text/javascript" src="orientation.js"></script>
    -->
    <script type="text/javascript">


function updateOrientation(){
    try  {
        var contentType = "show_normal";
        switch(window.orientation){
            case …
Run Code Online (Sandbox Code Playgroud)

iphone uiwebview

29
推荐指数
3
解决办法
4万
查看次数

UIWebView EXC_BAD_ACCESS崩溃

我遇到了使用UIWebView的应用程序崩溃.通常是在页面没有完全加载并且UIWebView被发送到stopLoading选择器时.或者当UIWebView完全加载页面时.我有EXC_BAD_ACCESS.堆栈看起来像这样:

#0  0x95bb7688 in objc_msgSend
#1  0x30a671db in -[UIWebView webView:decidePolicyForNavigationAction:request:frame:decisionListener:]
#2  0x3024a10d in __invoking___
#3  0x30249ff8 in -[NSInvocation invoke]
#4  0x358ab160 in HandleDelegateSource
#5  0x302452c1 in CFRunLoopRunSpecific
#6  0x30244628 in CFRunLoopRunInMode
#7  0x32044c31 in GSEventRunModal
#8  0x32044cf6 in GSEventRun
#9  0x309021ee in UIApplicationMain
#10 0x0000239c in main at main.m:13
Run Code Online (Sandbox Code Playgroud)

对我来说,最奇怪的是这里是webView:decidePolicyForNavigationAction:request:frame:decisionListener:选择器发送到UIWebView,因为在UIWebView文档中没有这样的选择器!仅适用于Cocoa(不是可可触摸)WebView.我怀疑UIWebView或其委托有问题.但我无法设置断点来观察它们.请告知我如何在这种情况下获得更多信息.

iphone exc-bad-access uiwebview

29
推荐指数
3
解决办法
2万
查看次数

UIWebView中的EXC_BAD_ACCESS

我刚从iTunes Connect下载了我的一个iPhone应用程序的崩溃报告.最常见的崩溃有如下所示的痕迹:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa1b1c1db
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3030e6f4 objc_msgSend + 16
1   UIKit                           0x30ebebee -[UIWebView webView:resource:didFinishLoadingFromDataSource:]
2   UIKit                           0x30ebe5ca -[UIWebViewWebViewDelegate webView:resource:didFinishLoadingFromDataSource:]
3   CoreFoundation                  0x32b73b5c __invoking___ + 60
4   CoreFoundation                  0x32bc67be -[NSInvocation invoke]
5   WebCore                         0x320baa86 HandleDelegateSource
6   CoreFoundation                  0x32bb8a96 CFRunLoopRunSpecific
7   CoreFoundation                  0x32bb8356 CFRunLoopRunInMode
8   GraphicsServices                0x30544cd4 GSEventRunModal
9   GraphicsServices                0x30544d80 GSEventRun
10  UIKit                           0x30d2c768 -[UIApplication _run]
11  UIKit                           0x30d2b46c UIApplicationMain
Run Code Online (Sandbox Code Playgroud)

我大约80%确定这是UIWebView内部的问题,超出了我能解决的范围.有没有人有任何关于如何缩小这个问题的建议,以帮助确定它是OS和UIWebView的问题,还是我可以在我的代码中修复和解决的问题?提前致谢.

更新:有问题的UIWebView在视图中,当用户点击相应导航控制器的后退按钮时,该视图将被释放.已接受的解决方案似乎为此错误发生的原因提供了一个很好的解释.

在建议解决之前:

- (void)dealloc {
    [webView …
Run Code Online (Sandbox Code Playgroud)

iphone crash-reports uiwebview

29
推荐指数
1
解决办法
1万
查看次数