UIWebView体系结构(六)UIWebView

UIWebView的实际成员变量都由UIWebViewInternal保存,UIWebViewInternal的声明如下:

[cpp]  view plain copy
  1. @interface UIWebViewInternal : NSObject  
  2. {  
  3.     UIScrollView *scroller;  
  4.     UIWebBrowserView *browserView;  
  5.     UICheckeredPatternView *checkeredPatternView;  
  6.     id <UIWebViewDelegate> delegate;  
  7.     unsigned int scalesPageToFit:1;  
  8.     unsigned int isLoading:1;  
  9.     unsigned int hasOverriddenOrientationChangeEventHandling:1;  
  10.     unsigned int drawsCheckeredPattern:1;  
  11.     unsigned int webSelectionEnabled:1;  
  12.     unsigned int drawInWebThread:1;  
  13.     unsigned int inRotation:1;  
  14.     NSURLRequest *request;  
  15.     int clickedAlertButtonIndex;  
  16.     UIWebViewWebViewDelegate *webViewDelegate;  
  17.     UIWebPDFViewHandler *pdfHandler;  
  18. }  
  19.   
  20. @end  
其中scroller指向_UIWebViewScrollView的实例。

UIWebViewWebViewDelegate的声明为:(代码很长,点此跳过)

[cpp]  view plain copy
  1. @interface UIWebViewWebViewDelegate : NSObject  
  2. {  
  3.     UIWebView *uiWebView;  
  4. }  
  5.   
  6. - (void)_clearUIWebView;  
  7. - (void)webView:(id)arg1 didChangeLocationWithinPageForFrame:(id)arg2;  
  8. - (BOOL)webView:(id)arg1 resource:(id)arg2 canAuthenticateAgainstProtectionSpace:(id)arg3 forDataSource:(id)arg4;  
  9. - (void)webView:(id)arg1 resource:(id)arg2 didCancelAuthenticationChallenge:(id)arg3 fromDataSource:(id)arg4;  
  10. - (void)webView:(id)arg1 resource:(id)arg2 didReceiveAuthenticationChallenge:(id)arg3 fromDataSource:(id)arg4;  
  11. - (void)webView:(id)arg1 resource:(id)arg2 didFailLoadingWithError:(id)arg3 fromDataSource:(id)arg4;  
  12. - (void)webView:(id)arg1 resource:(id)arg2 didFinishLoadingFromDataSource:(id)arg3;  
  13. - (id)webView:(id)arg1 identifierForInitialRequest:(id)arg2 fromDataSource:(id)arg3;  
  14. - (void)webView:(id)arg1 decidePolicyForGeolocationRequestFromOrigin:(id)arg2 frame:(id)arg3 listener:(id)arg4;  
  15. - (id)webView:(id)arg1 runJavaScriptTextInputPanelWithPrompt:(id)arg2 defaultText:(id)arg3 initiatedByFrame:(id)arg4;  
  16. - (BOOL)webView:(id)arg1 runJavaScriptConfirmPanelWithMessage:(id)arg2 initiatedByFrame:(id)arg3;  
  17. - (void)webView:(id)arg1 runJavaScriptAlertPanelWithMessage:(id)arg2 initiatedByFrame:(id)arg3;  
  18. - (void)webViewClose:(id)arg1;  
  19. - (void)webView:(id)arg1 didFirstLayoutInFrame:(id)arg2;  
  20. - (void)webView:(id)arg1 didFailLoadWithError:(id)arg2 forFrame:(id)arg3;  
  21. - (void)webView:(id)arg1 didFinishLoadForFrame:(id)arg2;  
  22. - (void)webView:(id)arg1 decidePolicyForMIMEType:(id)arg2 request:(id)arg3 frame:(id)arg4 decisionListener:(id)arg5;  
  23. - (void)webView:(id)arg1 didFailProvisionalLoadWithError:(id)arg2 forFrame:(id)arg3;  
  24. - (void)webView:(id)arg1 didReceiveServerRedirectForProvisionalLoadForFrame:(id)arg2;  
  25. - (void)webView:(id)arg1 didClearWindowObject:(id)arg2 forFrame:(id)arg3;  
  26. - (id)webView:(id)arg1 resource:(id)arg2 willSendRequest:(id)arg3 redirectResponse:(id)arg4 fromDataSource:(id)arg5;  
  27. - (id)webView:(id)arg1 connectionPropertiesForResource:(id)arg2 dataSource:(id)arg3;  
  28. - (void)webViewSupportedOrientationsUpdated:(id)arg1;  
  29. - (void)webView:(id)arg1 didReceiveTitle:(id)arg2 forFrame:(id)arg3;  
  30. - (void)webView:(id)arg1 didCommitLoadForFrame:(id)arg2;  
  31. - (void)webView:(id)arg1 didStartProvisionalLoadForFrame:(id)arg2;  
  32. - (void)webView:(id)arg1 printFrameView:(id)arg2;  
  33. - (void)webView:(id)arg1 exceededApplicationCacheOriginQuotaForSecurityOrigin:(id)arg2 totalSpaceNeeded:(unsigned int)arg3;  
  34. - (void)webView:(id)arg1 frame:(id)arg2 exceededDatabaseQuotaForSecurityOrigin:(id)arg3 database:(id)arg4;  
  35. - (void)webView:(id)arg1 unableToImplementPolicyWithError:(id)arg2 frame:(id)arg3;  
  36. - (void)webView:(id)arg1 decidePolicyForNavigationAction:(id)arg2 request:(id)arg3 frame:(id)arg4 decisionListener:(id)arg5;  
  37. - (void)webView:(id)arg1 decidePolicyForNewWindowAction:(id)arg2 request:(id)arg3 newFrameName:(id)arg4 decisionListener:(id)arg5;  
  38. - (id)webView:(id)arg1 createWebViewWithRequest:(id)arg2;  
  39. - (id)initWithUIWebView:(id)arg1;  
  40.   
  41. @end  

它负责接收很多来自WebView的通知,并转发给UIWebView。如第一节概貌中提到,它实现了多个WebView的delegate。

UIWebView的non-public declaration为: (代码很长,点此跳过

[cpp]  view plain copy
  1. @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>  
  2. {  
  3.     UIWebViewInternal *_internal;  
  4. }  
  5.   
  6. + (void)_updatePersistentStoragePaths;  
  7. + (void)_fixPathsForSandboxDirectoryChange;  
  8. + (id)_relativePathFromAbsolutePath:(id)arg1 removingPathComponents:(unsigned int)arg2;  
  9. - (void)_addShortcut:(id)arg1;  
  10. - (void)_define:(id)arg1;  
  11. - (void)selectAll:(id)arg1;  
  12. - (void)select:(id)arg1;  
  13. - (void)copy:(id)arg1;  
  14. - (BOOL)canPerformAction:(SEL)arg1 withSender:(id)arg2;  
  15. - (void)configureWithSettings:(id)arg1;  
  16. - (unsigned int)_audioSessionCategoryOverride;  
  17. - (void)_setAudioSessionCategoryOverride:(unsigned int)arg1;  
  18. - (BOOL)_alwaysDispatchesScrollEvents;  
  19. - (void)_setAlwaysDispatchesScrollEvents:(BOOL)arg1;  
  20. - (unsigned int)_pageCount;  
  21. - (void)_setGapBetweenPages:(float)arg1;  
  22. - (float)_gapBetweenPages;  
  23. - (void)_setPageLength:(float)arg1;  
  24. - (float)_pageLength;  
  25. - (void)_setPaginationBehavesLikeColumns:(BOOL)arg1;  
  26. - (BOOL)_paginationBehavesLikeColumns;  
  27. - (void)_setPaginationMode:(int)arg1;  
  28. - (int)_paginationMode;  
  29. - (void)_setDrawInWebThread:(BOOL)arg1;  
  30. - (void)_setWebSelectionEnabled:(BOOL)arg1;  
  31. - (void)_setDrawsCheckeredPattern:(BOOL)arg1;  
  32. - (void)_setOverridesOrientationChangeEventHandling:(BOOL)arg1;  
  33. - (id)_pdfViewHandler;  
  34. - (id)_scrollView;  
  35. - (id)_documentView;  
  36. - (id)_browserView;  
  37. - (id)_initWithWebView:(id)arg1;  
  38. - (struct CGImage *)newSnapshotWithRect:(struct CGRect)arg1;  
  39. - (struct CGImage *)createSnapshotWithRect:(struct CGRect)arg1;  
  40. - (void)webView:(id)arg1 didChangeLocationWithinPageForFrame:(id)arg2;  
  41. - (BOOL)webView:(id)arg1 resource:(id)arg2 canAuthenticateAgainstProtectionSpace:(id)arg3 forDataSource:(id)arg4;  
  42. - (void)webView:(id)arg1 resource:(id)arg2 didCancelAuthenticationChallenge:(id)arg3 fromDataSource:(id)arg4;  
  43. - (void)webView:(id)arg1 resource:(id)arg2 didReceiveAuthenticationChallenge:(id)arg3 fromDataSource:(id)arg4;  
  44. - (void)webView:(id)arg1 resource:(id)arg2 didFailLoadingWithError:(id)arg3 fromDataSource:(id)arg4;  
  45. - (void)webView:(id)arg1 resource:(id)arg2 didFinishLoadingFromDataSource:(id)arg3;  
  46. - (id)webView:(id)arg1 identifierForInitialRequest:(id)arg2 fromDataSource:(id)arg3;  
  47. - (void)webView:(id)arg1 decidePolicyForGeolocationRequestFromOrigin:(id)arg2 frame:(id)arg3 listener:(id)arg4;  
  48. - (id)webView:(id)arg1 runJavaScriptTextInputPanelWithPrompt:(id)arg2 defaultText:(id)arg3 initiatedByFrame:(id)arg4;  
  49. - (BOOL)webView:(id)arg1 runJavaScriptConfirmPanelWithMessage:(id)arg2 initiatedByFrame:(id)arg3;  
  50. - (void)webView:(id)arg1 runJavaScriptAlertPanelWithMessage:(id)arg2 initiatedByFrame:(id)arg3;  
  51. - (id)_makeAlertView;  
  52. - (void)webViewClose:(id)arg1;  
  53. - (void)alertView:(id)arg1 didDismissWithButtonIndex:(int)arg2;  
  54. - (void)webView:(id)arg1 didFirstLayoutInFrame:(id)arg2;  
  55. - (void)webView:(id)arg1 didFailLoadWithError:(id)arg2 forFrame:(id)arg3;  
  56. - (void)webView:(id)arg1 didFinishLoadForFrame:(id)arg2;  
  57. - (void)webView:(id)arg1 didFailProvisionalLoadWithError:(id)arg2 forFrame:(id)arg3;  
  58. - (void)webView:(id)arg1 didReceiveServerRedirectForProvisionalLoadForFrame:(id)arg2;  
  59. - (void)webView:(id)arg1 didClearWindowObject:(id)arg2 forFrame:(id)arg3;  
  60. - (id)webView:(id)arg1 resource:(id)arg2 willSendRequest:(id)arg3 redirectResponse:(id)arg4 fromDataSource:(id)arg5;  
  61. - (id)webView:(id)arg1 connectionPropertiesForResource:(id)arg2 dataSource:(id)arg3;  
  62. - (void)webView:(id)arg1 didReceiveTitle:(id)arg2 forFrame:(id)arg3;  
  63. - (void)webView:(id)arg1 didCommitLoadForFrame:(id)arg2;  
  64. - (void)webView:(id)arg1 didStartProvisionalLoadForFrame:(id)arg2;  
  65. - (void)_updateRequest;  
  66. - (void)webViewSupportedOrientationsUpdated:(id)arg1;  
  67. - (void)webView:(id)arg1 printFrameView:(id)arg2;  
  68. - (void)webView:(id)arg1 exceededApplicationCacheOriginQuotaForSecurityOrigin:(id)arg2 totalSpaceNeeded:(unsigned int)arg3;  
  69. - (void)webView:(id)arg1 frame:(id)arg2 exceededDatabaseQuotaForSecurityOrigin:(id)arg3 database:(id)arg4;  
  70. - (void)webView:(id)arg1 unableToImplementPolicyWithError:(id)arg2 frame:(id)arg3;  
  71. - (void)webView:(id)arg1 decidePolicyForMIMEType:(id)arg2 request:(id)arg3 frame:(id)arg4 decisionListener:(id)arg5;  
  72. - (void)webView:(id)arg1 decidePolicyForNavigationAction:(id)arg2 request:(id)arg3 frame:(id)arg4 decisionListener:(id)arg5;  
  73. - (void)webView:(id)arg1 decidePolicyForNewWindowAction:(id)arg2 request:(id)arg3 newFrameName:(id)arg4 decisionListener:(id)arg5;  
  74. - (void)_reportError:(id)arg1;  
  75. - (void)scrollViewWasRemoved:(id)arg1;  
  76. - (void)scrollViewDidScrollToTop:(id)arg1;  
  77. - (void)scrollViewDidEndDecelerating:(id)arg1;  
  78. - (void)scrollViewDidEndDragging:(id)arg1 willDecelerate:(BOOL)arg2;  
  79. - (void)_didCompleteScrolling;  
  80. - (void)scrollViewWillBeginDragging:(id)arg1;  
  81. - (void)scrollViewDidEndZooming:(id)arg1 withView:(id)arg2 atScale:(float)arg3;  
  82. - (void)scrollViewDidZoom:(id)arg1;  
  83. - (void)scrollViewWillBeginZooming:(id)arg1 withView:(id)arg2;  
  84. - (id)viewForZoomingInScrollView:(id)arg1;  
  85. - (void)restoreStateFromHistoryItem:(id)arg1 forWebView:(id)arg2;  
  86. - (void)saveStateToHistoryItem:(id)arg1 forWebView:(id)arg2;  
  87. - (void)webViewMainFrameDidFailLoad:(id)arg1 withError:(id)arg2;  
  88. - (void)webViewMainFrameDidFinishLoad:(id)arg1;  
  89. - (void)webViewMainFrameDidCommitLoad:(id)arg1;  
  90. - (void)webViewMainFrameDidFirstVisuallyNonEmptyLayoutInFrame:(id)arg1;  
  91. - (void)_updateScrollerViewForInputView:(id)arg1;  
  92. - (void)view:(id)arg1 didSetFrame:(struct CGRect)arg2 oldFrame:(struct CGRect)arg3;  
  93. - (BOOL)_appliesExclusiveTouchToSubviewTree;  
  94. - (void)setBackgroundColor:(id)arg1;  
  95. - (void)setOpaque:(BOOL)arg1;  
  96. - (void)_updateOpaqueAndBackgroundColor;  
  97. - (void)setBounds:(struct CGRect)arg1;  
  98. - (void)setFrame:(struct CGRect)arg1;  
  99. - (void)_frameOrBoundsChanged;  
  100. - (void)_rescaleDocument;  
  101. - (void)_finishRotation;  
  102. - (void)_beginRotation;  
  103. - (struct CGSize)sizeThatFits:(struct CGSize)arg1;  
  104. - (void)_updateCheckeredPattern;  
  105. @property(nonatomic) BOOL suppressesIncrementalRendering;  
  106. @property(readonly, nonatomic, getter=canGoForward) BOOL canGoForward;  
  107. @property(readonly, nonatomic, getter=canGoBack) BOOL canGoBack;  
  108. - (void)goForward;  
  109. - (void)goBack;  
  110. - (void)stopLoading;  
  111. - (void)reload;  
  112. @property(readonly, nonatomic) NSURLRequest *request;  
  113. - (void)loadData:(id)arg1 MIMEType:(id)arg2 textEncodingName:(id)arg3 baseURL:(id)arg4;  
  114. - (void)loadHTMLString:(id)arg1 baseURL:(id)arg2;  
  115. - (void)loadRequest:(id)arg1;  
  116. @property(readonly, nonatomic) UIScrollView *scrollView;  
  117. @property(nonatomic) id <UIWebViewDelegate> delegate;  
  118. @property(readonly, nonatomic, getter=isLoading) BOOL loading;  
  119. @property(nonatomic) BOOL scalesPageToFit;  
  120. @property(nonatomic) BOOL mediaPlaybackAllowsAirPlay;  
  121. @property(nonatomic) BOOL mediaPlaybackRequiresUserAction;  
  122. @property(nonatomic) BOOL allowsInlineMediaPlayback;  
  123. @property(nonatomic) unsigned int dataDetectorTypes;  
  124. @property(nonatomic) BOOL detectsPhoneNumbers;  
  125. - (id)stringByEvaluatingJavaScriptFromString:(id)arg1;  
  126. - (void)dealloc;  
  127. - (void)encodeWithCoder:(id)arg1;  
  128. - (void)_populateArchivedSubviews:(id)arg1;  
  129. - (id)initWithCoder:(id)arg1;  
  130. - (id)initWithFrame:(struct CGRect)arg1;  
  131. - (id)_initWithFrame:(struct CGRect)arg1 enableReachability:(BOOL)arg2;  
  132. - (void)_webViewCommonInitWithWebView:(id)arg1 scalesPageToFit:(BOOL)arg2 shouldEnableReachability:(BOOL)arg3;  
  133. - (void)_updateViewSettings;  
  134. - (void)_setRichTextReaderViewportSettings;  
  135. - (void)_setScalesPageToFitViewportSettings;  
  136. - (void)_didRotate:(id)arg1;  
  137. @property(nonatomic) BOOL keyboardDisplayRequiresUserAction;  
  138. - (void)decodeRestorableStateWithCoder:(id)arg1;  
  139. - (void)encodeRestorableStateWithCoder:(id)arg1;  
  140. - (BOOL)isElementAccessibilityExposedToInterfaceBuilder;  
  141. - (Class)_printFormatterClass;  
  142.   
  143. @end  

从函数名看其主要作用,只列non-public API:

  • 选择/全选/复制网页内容
  • 维护设置项
  • 设置是否在WebThread渲染页面
  • 设置是否允许选择网页内容
  • 提供截图的接口(newSnapshotWithRect)
  • 在UIWebDocumentView传过来的回调通知中做进一步处理
  • 展示alertView,包括由js alert发起的对话框
  • 响应UIScrollViewDelegate的回调,传递消息给UIWebBrowserView
  • 处理旋转屏幕的逻辑
  • 序列化/反序列化

有一些API虽然名字看懂了,但没办法猜出意义,后面做反编译研究时再详细说吧。这个系列都是浅探。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值