Flutetr webview加載本地html 無法加載js文件

Flutter官方的webview_flutter ios中使用的wkwebview來實(shí)現(xiàn)的率触,webview加載本地html 無法加載js文件, 網(wǎng)上找了很多方法都不行踱葛、后來發(fā)現(xiàn)只要在FlutterWebview initWithFrame方法中加上這一句話就好了饭尝,另外注意需要在當(dāng)前app的沙盒中俘陷。

  [configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];

完整的代碼

- (instancetype)initWithFrame:(CGRect)frame
               viewIdentifier:(int64_t)viewId
                    arguments:(id _Nullable)args
              binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
  if (self = [super init]) {
    _viewId = viewId;

    NSString* channelName = [NSString stringWithFormat:@"plugins.flutter.io/webview_%lld", viewId];
    _channel = [FlutterMethodChannel methodChannelWithName:channelName binaryMessenger:messenger];
    _javaScriptChannelNames = [[NSMutableSet alloc] init];

    WKUserContentController* userContentController = [[WKUserContentController alloc] init];
    if ([args[@"javascriptChannelNames"] isKindOfClass:[NSArray class]]) {
      NSArray* javaScriptChannelNames = args[@"javascriptChannelNames"];
      [_javaScriptChannelNames addObjectsFromArray:javaScriptChannelNames];
      [self registerJavaScriptChannels:_javaScriptChannelNames controller:userContentController];
    }

    NSDictionary<NSString*, id>* settings = args[@"settings"];

    WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
      
//      WKUserScript *script = [[WKUserScript alloc] initWithSource:[self jsString] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
//      [configuration.userContentController addUserScript:script];
      [configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
      
    configuration.userContentController = userContentController;
    [self updateAutoMediaPlaybackPolicy:args[@"autoMediaPlaybackPolicy"]
                        inConfiguration:configuration];

    _webView = [[FLTWKWebView alloc] initWithFrame:frame configuration:configuration];
    _navigationDelegate = [[FLTWKNavigationDelegate alloc] initWithChannel:_channel];
    _webView.UIDelegate = self;
    _webView.navigationDelegate = _navigationDelegate;
    __weak __typeof__(self) weakSelf = self;
    [_channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
      [weakSelf onMethodCall:call result:result];
    }];

    if (@available(iOS 11.0, *)) {
      _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
      if (@available(iOS 13.0, *)) {
        _webView.scrollView.automaticallyAdjustsScrollIndicatorInsets = NO;
      }
    }

    [self applySettings:settings];
    // TODO(amirh): return an error if apply settings failed once it's possible to do so.
    // https://github.com/flutter/flutter/issues/36228

    NSString* initialUrl = args[@"initialUrl"];
    if ([initialUrl isKindOfClass:[NSString class]]) {
      [self loadUrl:initialUrl];
    }
  }
  return self;
}

android的話增加這句話,容許加載本地文件url

      webView.getSettings().setAllowFileAccessFromFileURLs(true);

以下方法是幾種不行的方法嘗試愿待;也是作下記錄浩螺。

//- (bool)loadUrl:(NSString*)url withHeaders:(NSDictionary<NSString*, NSString*>*)headers {
//  NSURL* nsUrl = [NSURL URLWithString:url];
//  if (!nsUrl) {
//    return false;
//  }
//  NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:nsUrl];
//  [request setAllHTTPHeaderFields:headers];
////判斷是url,然后使用不同的加載方式
//  if([url hasPrefix:@"http"]) {
//      [_webView loadRequest:request];
//      NSLog(@"zb....%@",@"loadRequest");
//  }else{
//      [_webView loadFileURL:nsUrl allowingReadAccessToURL:[nsUrl URLByDeletingLastPathComponent]];
//
//      //      NSURL *pathURL = [NSURL fileURLWithPath:url];
////        NSURL* nsUrl = [NSURL URLWithString:@"file:///Users/zhoubo5/jdflutter_webview/dart_2_js_web_example/build/web"];
////
////      NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
////
////      NSString *path = [document stringByAppendingString:@"/web/index.html"];
////      NSURL *pathURL = [NSURL fileURLWithPath:path];
////      NSString *path1 = [document stringByAppendingString:@"/web"];
////      NSURL *pathURL2 = [NSURL fileURLWithPath:path1];
//
////      NSURL *accessURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];
////      [self.webview loadFileURL:self.url allowingReadAccessToURL:accessURL];
//
////       [_webView loadFileURL:pathURL allowingReadAccessToURL:pathURL2];
//
//
//
////      //項(xiàng)目中的文件夾路徑
////      NSString *directoryPath = [NSFileManager appSourceName:@"FeedbackH5" andType:@""];
////
////      //tmp緩存文件夾路徑
////      NSString *tmpPath = [KFileManger tmpPath];
////
////      //新文件夾名字
////      NSString *wwwDir =@"www";
////
////      //tmp文件夾下創(chuàng)建www文件夾
////      [KFileManger createDirWithPath:tmpPath andDirectoryName: wwwDir];
////
////      //tmp中的www文件夾中的路徑
////      NSString *tmpWWW = [tmpPath stringByAppendingString: wwwDir];
////
////      //copy文件夾到 tmp/www 路徑下
////      [KFileManger copyMissingFile:directoryPath toPath:tmpWWW];
////
////      // 字符 tmp/www/FeedbackH5/pages/feedback.html 全路徑
////      NSString *tmpWWWFeedback = [tmpWWW stringByAppendingString:@"/FeedbackH5/pages/feedback.html"];
////
////      //tmp 操作仍侥,字符轉(zhuǎn)換成URL
////      NSURL *feedbackURL = [NSURL fileURLWithPath:tmpWWWFeedback];
////
////      //WKWebView加載
////      [_webView loadRequest:[NSURLRequest requestWithURL:feedbackURL]];
//
////         WKWebView *webView  =[[WKWebView alloc]initWithFrame:CGRectMake(0, 0, 300, 400)];
//
////      [self.view addSubview:webView];
//
////      [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path isDirectory:NO]]];
//
////// url    __NSCFString *    @"file:///Users/zhoubo5/jdflutter_webview/dart_2_js_web_example/build/web/index.html"    0x000060000263ec30
////      NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
////
////  NSString *path = [document stringByAppendingString:@"/park.html"];
////
////      NSArray *LibraryArray =  NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
////
////      NSString *CachesPath = [[LibraryArray lastObject] stringByAppendingPathComponent:@"Caches"];
////
////      NSString *accessURLStr = [[[LibraryArray lastObject] stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:@"/web"];
////      NSURL *accessURL = [NSURL fileURLWithPath:accessURLStr];
////          [_webView loadFileURL:pathURL allowingReadAccessToURL:accessURL];
//
////      NSData *htmlData = [[NSData alloc] initWithContentsOfFile:@"/Users/zhoubo5/jdflutter_webview/dart_2_js_web_example/build/web/index.html"];
////            NSData *htmlData = [[NSData alloc] initWithContentsOfFile:path];
////
////      NSURL* nsUrl3 = [NSURL URLWithString:@"file:///Users/zhoubo5/Library/Developer/CoreSimulator/Devices/7FF29F20-5129-4931-8F79-A95C70CF2895/data/Containers/Data/Application/3DB61D34-D6DC-4CDB-BA2B-305775ECDDCE/Documents/web"];
//
////      if (@available(iOS 9.0, *)) {
////          [_webView loadData:htmlData MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:nsUrl3];
////      } else {
////          // Fallback on earlier versions
////      }
//
//      NSLog(@"zb....%@",@"loadFileURL");
//  }
//  return true;
//}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末要出,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子农渊,更是在濱河造成了極大的恐慌患蹂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸紊,死亡現(xiàn)場(chǎng)離奇詭異传于,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)醉顽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門沼溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人游添,你說我怎么就攤上這事系草。” “怎么了唆涝?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵找都,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我廊酣,道長(zhǎng)能耻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任啰扛,我火速辦了婚禮嚎京,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隐解。我一直安慰自己鞍帝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布煞茫。 她就那樣靜靜地躺著帕涌,像睡著了一般摄凡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚓曼,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天亲澡,我揣著相機(jī)與錄音,去河邊找鬼纫版。 笑死床绪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的其弊。 我是一名探鬼主播癞己,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梭伐!你這毒婦竟也來了痹雅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤糊识,失蹤者是張志新(化名)和其女友劉穎绩社,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赂苗,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愉耙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哑梳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劲阎。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸠真,靈堂內(nèi)的尸體忽然破棺而出悯仙,到底是詐尸還是另有隱情,我是刑警寧澤吠卷,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布锡垄,位于F島的核電站,受9級(jí)特大地震影響祭隔,放射性物質(zhì)發(fā)生泄漏货岭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一疾渴、第九天 我趴在偏房一處隱蔽的房頂上張望千贯。 院中可真熱鬧,春花似錦搞坝、人聲如沸搔谴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦第。三九已至峰弹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芜果,已是汗流浹背鞠呈。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留右钾,地道東北人蚁吝。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舀射,于是被迫代替她去往敵國和親灭将。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354