[ https://issues.apache.org/jira/browse/WEEX-233?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16389487#comment-16389487 ]
ASF GitHub Bot commented on WEEX-233: ------------------------------------- Github user acton393 commented on a diff in the pull request: https://github.com/apache/incubator-weex/pull/1047#discussion_r172826404 --- Diff: ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m --- @@ -69,6 +71,11 @@ - (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDict { if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) { self.url = attributes[@"src"]; + + if(attributes[@"source"]){ + self.source = attributes[@"source"]; --- End diff -- the init method is executed in background thread named component method and `self.source` will call [self setSource:""], the method for `setSource` called view operation which is only for main thread. A better way is that define another member for source to save the variable during this initialization, and call self.source in component hook lifeCycle like `viewDidLoad`. > More enhanced about <web> component > ----------------------------------- > > Key: WEEX-233 > URL: https://issues.apache.org/jira/browse/WEEX-233 > Project: Weex > Issue Type: Improvement > Components: iOS > Reporter: TangWei > Assignee: Adam Feng > Priority: Major > Labels: features, newbie > Original Estimate: 72h > Remaining Estimate: 72h > > Hi, I'm Tw93(侑夕) from [Fliggy|https://www.fliggy.com/], I'd like to discuss > the enhancements about component, let it take over where we can't implement > through weex. > h2. Target > {{<web>}} is used to display web content that specified by src attribute in > weex page,We also can use webview module to control WebView behavior such as > goBack, goForward and reload. > But it's not enough in most businesses,I think a more enhanced web component > should have the following: > * Support to send messages from Weex to a html in component. > * Support to send messages from a html in component to Weex. > * Support to render html source. > Previously, component was an island that only rendered a remote url, but > enabled it to communicate through the context native to the webView. Then I'm > going to describe the solution that I came up with. > h2. My solution > h3. Code > * Weex iOS: > ** > [https://github.com/tw93/incubator-weex/blob/ios-feature-enhanced-web/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m] > * Weex Vue Demo: > ** [http://dotwe.org/vue/8847473f8f596573dadb66a344edfce2] > ** [Demo Bundle > JS|http://dotwe.org/raw/dist/b1f6d242760945d4b674c4f5913a39e4.bundle.wx] > ** [Web End|http://h5.m.taobao.com/trip/wx-detection-demo/web.html] > h3. > [Demo|https://gw.alipayobjects.com/zos/rmsportal/sBfTGamezxaBCGPshyXT.gif] && > [Theory|https://img.alicdn.com/tfs/TB1hEhXbxGYBuNjy0FnXXX5lpXa-1872-1208.png] > |[!https://camo.githubusercontent.com/4c7a7b69d686b8127a0bdc89962c1aceac912083/68747470733a2f2f67772e616c697061796f626a656374732e636f6d2f7a6f732f726d73706f7274616c2f7342665447616d657a78614243475073687958542e676966|width=240!|https://camo.githubusercontent.com/4c7a7b69d686b8127a0bdc89962c1aceac912083/68747470733a2f2f67772e616c697061796f626a656374732e636f6d2f7a6f732f726d73706f7274616c2f7342665447616d657a78614243475073687958542e676966]|[!https://camo.githubusercontent.com/b1ed3e13b070b8302c2cecb067346a8da051207c/68747470733a2f2f696d672e616c6963646e2e636f6d2f7466732f544231684568586278475942754e6a7930466e585858356c7058612d313837322d313230382e706e67|width=600!|https://camo.githubusercontent.com/b1ed3e13b070b8302c2cecb067346a8da051207c/68747470733a2f2f696d672e616c6963646e2e636f6d2f7466732f544231684568586278475942754e6a7930466e585858356c7058612d313837322d313230382e706e67]| > h3. Details > h4. Support to send messages from Weex to a html in component. > * Native: > \{{- (void)postMessage:(NSDictionary *)data { NSDictionary *eventDict = @ { > @"data" : data } > ; NSString *json = [WXUtility JSONString:eventDict]; NSString *code = > [NSString stringWithFormat:@"(function ()\\{document.dispatchEvent(new > MessageEvent('message', %@));}())",json]; [_jsContext evaluateScript:code]; } > }} > * How to use: > \{{// Weex const webview = weex.requireModule('webview'); > webview.postMessage(this.$refs.webview, {detail:"message"}); // Web > document.addEventListener('message',function(e)\{ console.log(e.data.detail) > },false) }} > h4. Support to send messages from a html in component to Weex. > * Native: > {{_jsContext[@"postMessage"] = ^(JSValue *data){ [weakSelf > fireEvent:@"message" params:[data toDictionary]]; }; }} > * How to use: > \{{// Weex <web @message="onMessage"></web> // Web > window.postMessage(message, targetOrigin, false); }} > h4. Support to render html source. > * Native: > {{[_webview loadHTMLString:_source baseURL:nil]; }} > * How to use: > <web source='<p style="text-align: center;"><img align="absmiddle" > src="http://img03.taobaocdn.com/imgextra/i3/1124701655/TB2zmmIcpXXXXbIXpXXXXXXXXXX_!!1124701655.jpg"/></p>'></web> > Welcome to put forward any suggestion about the solution or other > requirements for the component, Thanks! -- This message was sent by Atlassian JIRA (v7.6.3#76005)