mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-01 22:41:28 +08:00
Summary: This diff exposes a new experimental method `[RCTJavaScriptLoader +attemptSynchronousLoadOfBundleAtURL:sourceLength:error:]`. It may be used if you know that a specific call site must load its JavaScript synchronously, or else fail entirely. This new API will succeed for file URLs that point to a RAM bundle. It will fail for non-RAM-bundle files and for HTTP URLs. This also cleans up the error domain and codes for this class. This should be the only externally visible change from this diff if you don't use the new API: the codes and domains you receive from the API may change slightly. They were pretty sloppy and undocumented before, so I think this change is for the better. Reviewed By: bnham Differential Revision: D3545956 fbshipit-source-id: 30e65f4e8330d2d68f3f50ade077fdc1db4a435e
53 lines
1.8 KiB
Objective-C
Executable File
53 lines
1.8 KiB
Objective-C
Executable File
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#import "RCTBridgeDelegate.h"
|
|
|
|
extern uint32_t const RCTRAMBundleMagicNumber;
|
|
|
|
extern NSString *const RCTJavaScriptLoaderErrorDomain;
|
|
|
|
NS_ENUM(NSInteger) {
|
|
RCTJavaScriptLoaderErrorNoScriptURL = 1,
|
|
RCTJavaScriptLoaderErrorFailedOpeningFile = 2,
|
|
RCTJavaScriptLoaderErrorFailedReadingFile = 3,
|
|
RCTJavaScriptLoaderErrorFailedStatingFile = 3,
|
|
RCTJavaScriptLoaderErrorURLLoadFailed = 3,
|
|
|
|
RCTJavaScriptLoaderErrorCannotBeLoadedSynchronously = 1000,
|
|
};
|
|
|
|
@class RCTBridge;
|
|
|
|
/**
|
|
* Class that allows easy embedding, loading, life-cycle management of a
|
|
* JavaScript application inside of a native application.
|
|
* TODO: Incremental module loading. (low pri).
|
|
*/
|
|
@interface RCTJavaScriptLoader : NSObject
|
|
|
|
+ (void)loadBundleAtURL:(NSURL *)scriptURL onComplete:(RCTSourceLoadBlock)onComplete;
|
|
|
|
/**
|
|
* @experimental
|
|
* Attempts to synchronously load the script at the given URL. The following two conditions must be met:
|
|
* 1. It must be a file URL.
|
|
* 2. It must point to a RAM bundle, or allowLoadingNonRAMBundles must be YES.
|
|
* If the URL does not meet those conditions, this method will return nil and supply an error with the domain
|
|
* RCTJavaScriptLoaderErrorDomain and the code RCTJavaScriptLoaderErrorCannotBeLoadedSynchronously.
|
|
*/
|
|
+ (NSData *)attemptSynchronousLoadOfBundleAtURL:(NSURL *)scriptURL
|
|
sourceLength:(int64_t *)sourceLength
|
|
allowLoadingNonRAMBundles:(BOOL)allowLoadingNonRAMBundles
|
|
error:(NSError **)error;
|
|
|
|
@end
|