WKWebView আইওএস 8 এর অধীন স্থানীয় ফাইলগুলি লোড করছে না


123

পূর্ববর্তী iOS 8 এ বিটাগুলির জন্য, (বান্ডেল) একটি স্থানীয় ওয়েব অ্যাপ্লিকেশন লোড এবং এটি উভয় জন্য কাজ করে জরিমানা UIWebViewএবং WKWebView, এবং আমি তাই নয়, নতুন ব্যবহার করে একটি ওয়েব খেলা বৈশিষ্ট্যসমূহ নিয়ে আসা WKWebViewAPI- টি।

var url = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("car", ofType:"html"))

webView = WKWebView(frame:view.frame)
webView!.loadRequest(NSURLRequest(URL:url))

view.addSubview(webView)

তবে বিটা 4-এ, আমি একটি ফাঁকা সাদা পর্দা পেয়েছি ( UIWebViewএখনও কাজ করছে), দেখে মনে হচ্ছে কিছুই লোড হয় না বা কার্যকর হয় না। লগতে আমি একটি ত্রুটি দেখেছি:

এর জন্য একটি স্যান্ডবক্স এক্সটেনশন তৈরি করতে পারেনি /

আমাকে সঠিক পথে পরিচালিত করতে কোন সহায়তা? ধন্যবাদ!


ভিউডিডলয়েডে ভিউ হায়ারার্কিতে ওয়েবভিউ যুক্ত করার চেষ্টা করুন, এবং ভিউউইল অ্যাপয়ারে অনুরোধটি লোড করুন। আমার ডব্লিউকেউইউভিউ এখনও কাজ করছে, তবে আমার কাছে এটিই রয়েছে। সম্ভবত ওয়েবভিউয়ের অনুরোধগুলি ভিউ হায়ারার্কিতে না থাকলে লোড না করার একটি অপ্টিমাইজেশন রয়েছে?
rvijay007

সম্পন্ন হয়েছে (ভিউ-এডড ভিউতে ভিড.এলডিভিউ এবং ভিউইলঅ্যাপিয়ারে লোডের অনুরোধ) এবং আমি একই সাদা পর্দা এবং একই ত্রুটি বার্তা পেয়েছি।
লিম থিয়ে চিয়ান

9
এটি কেবলমাত্র ডিভাইসে ঘটবে বলে মনে হচ্ছে কারণ সিমুলেটারে ভাল কাজ করে। আমি ওজেজিকে ব্যবহার করছি।
গাইড

1
এটি এক্সকোড - - বিটা in-এ একটি সমস্যা হিসাবে রয়ে গেছে My আমার অস্থায়ী সমাধানটি ছিল স্থানীয় ফাইলগুলি পরিবেশন করতে github.com/swisspol/GCDWebServer ব্যবহার করা।
GuidoMB

2
আইওএস 8.0.1 এর অধীনে কেউ এটি পরীক্ষা করেছে?
লিম থিয়ে চেন

উত্তর:


106

তারা শেষ পর্যন্ত বাগ সমাধান! এখন আমরা ব্যবহার করতে পারি -[WKWebView loadFileURL:allowingReadAccessToURL:]। স্পষ্টতই ডাব্লুডাব্লুডিসি 2015 ভিডিও 504 তে সাফারি ভিউ কন্ট্রোলারের পরিচয় করিয়ে ফিক্সটির মূল্য কয়েক সেকেন্ড ছিল

https://developer.apple.com/videos/wwdc/2015/?id=504

আইওএস 8 ~ আইওএস 10 এর জন্য (সুইফ্ট 3)

ড্যান ফাবুলিশের উত্তর যেমনটি জানিয়েছে যে এটি ডাব্লুউইউবিউ ভিউয়ের একটি বাগ যা সম্ভবত খুব শীঘ্রই কোনও সময় সমাধান করা যাচ্ছে না এবং তিনি যেমন বলেছিলেন যে সেখানে একটি কাজ আছে :)

আমি কেবল উত্তর দিচ্ছি কারণ আমি এখানে কাজটি দেখাতে চেয়েছিলাম। আইএমও কোডটি https://github.com/shazron/WKWebViewFIleUrlTest এ দেখানো হয়েছে সম্পর্কিত নয় এমন বেশিরভাগ লোকেরা সম্ভবত আগ্রহী নয়।

কাজের চারপাশে কোডের 20 টি লাইন, ত্রুটি পরিচালনা এবং মন্তব্যগুলি অন্তর্ভুক্ত রয়েছে, কোনও সার্ভারের প্রয়োজন নেই :)

func fileURLForBuggyWKWebView8(fileURL: URL) throws -> URL {
    // Some safety checks
    if !fileURL.isFileURL {
        throw NSError(
            domain: "BuggyWKWebViewDomain",
            code: 1001,
            userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("URL must be a file URL.", comment:"")])
    }
    try! fileURL.checkResourceIsReachable()

    // Create "/temp/www" directory
    let fm = FileManager.default
    let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("www")
    try! fm.createDirectory(at: tmpDirURL, withIntermediateDirectories: true, attributes: nil)

    // Now copy given file to the temp directory
    let dstURL = tmpDirURL.appendingPathComponent(fileURL.lastPathComponent)
    let _ = try? fm.removeItem(at: dstURL)
    try! fm.copyItem(at: fileURL, to: dstURL)

    // Files in "/temp/www" load flawlesly :)
    return dstURL
}

এবং হিসাবে ব্যবহার করা যেতে পারে:

override func viewDidLoad() {
    super.viewDidLoad()
    var fileURL = URL(fileURLWithPath: Bundle.main.path(forResource:"file", ofType: "pdf")!)

    if #available(iOS 9.0, *) {
        // iOS9 and above. One year later things are OK.
        webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
    } else {
        // iOS8. Things can (sometimes) be workaround-ed
        //   Brave people can do just this
        //   fileURL = try! pathForBuggyWKWebView8(fileURL: fileURL)
        //   webView.load(URLRequest(url: fileURL))
        do {
            fileURL = try fileURLForBuggyWKWebView8(fileURL: fileURL)
            webView.load(URLRequest(url: fileURL))
        } catch let error as NSError {
            print("Error: " + error.debugDescription)
        }
    }
}

2
পুরো ফোল্ডার, চিত্র এবং সমস্ত কিছু অনুলিপি করার জন্য এর জন্য কিছু পরিবর্তন ifications let orgFolder = NSBundle.mainBundle().resourcePath! + "/www"; var newFilePath = pathForBuggyWKWebView(orgFolder) self.loadingWebView!.loadRequest(NSURLRequest(URL: NSURL.fileURLWithPath(newFilePath!+"/Loading.html")!))
পাইওয়ফ

1
পাইওয়াফের সমাধানটি আমার জন্য কিছুটা ভাল কাজ করেছে, মনে রাখবেন যে এটি "সেলফ ওয়েলভিউ" হওয়া উচিত এবং উপরের উদাহরণটি দেওয়া "সেলফ লোডিং ওয়েভভিউ" নয়
প্যাট্রিক ফ্যাব্রিজিয়াস

2
ধন্যবাদ @ nacho4d। tldr; / tmp ফোল্ডার সমাধান 8.0 এ কাজ করবে না তবে 8.0.2 এ চলবে। আমার পরীক্ষার ডিভাইসে কাজ করার জন্য এই সমাধানটি পেতে আমার সমস্যা হয়েছিল এবং শেষ পর্যন্ত চেষ্টা করার জন্য শ্যাজারনের রেপো ক্লোন করে ফেললাম। এটিও কাজ করেনি। দেখা যাচ্ছে যে শ্যাজারনের সমাধান আইওএসের সংস্করণে কাজ করে না আমার ডিভাইসটি আইফোন 6 প্লাসে 8.0 (12A366) চলছে। আমি এটি iOS 8.0.2 চলমান একটি ডিভাইসে (আইপ্যাড মিনি) চেষ্টা করেছি এবং এটি দুর্দান্ত কাজ করে।
jvoll

1
চেষ্টা করা উচিত _ = চেষ্টা করা? fm.removeItemAtURL (dstURL) এর পরিবর্তে _ = চেষ্টা করা যাক? fileMgr.removeItemAtURL (dstURL)
ডিকান

3
কেবল সাধারণ ওয়েবসাইটগুলির জন্য। আপনি যদি কৌণিকের মাধ্যমে এজাক্স ব্যবহার করছেন বা স্থানীয় দর্শনগুলি লোড করছেন, "ক্রস অরিজিন অনুরোধগুলি কেবল এইচটিটিপি-র জন্য সমর্থনযোগ্য" আশা করুন। আপনার একমাত্র ফ্যালব্যাক হ'ল স্থানীয় ওয়েবসার্ভ পদ্ধতি যা আমি পছন্দ করি না এটি স্থানীয় নেটওয়ার্কে দৃশ্যমান। পোস্টে এটি লক্ষ্য করা দরকার, লোককে কয়েক ঘন্টা সংরক্ষণ করুন।
জেনসন-বাটন-ইভেন্ট 23'16

83

WKWebView ফাইল থেকে সামগ্রী লোড করতে পারে না: এর loadRequest:পদ্ধতির মাধ্যমে URL গুলি । http://www.openradar.me/18039024

আপনি এর মাধ্যমে সামগ্রী লোড করতে পারেন loadHTMLString:, তবে যদি আপনার বেসল URL ফাইল হয়: ইউআরএল, তবে এটি এখনও কাজ করবে না।

আইওএস 9 এর একটি নতুন এপিআই রয়েছে যা আপনি যা চান তা করবে [WKWebView loadFileURL:allowingReadAccessToURL:]

সেখানে iOS 8 এ জন্য একটি কার্যসংক্রান্ত নেই , উদ্দেশ্য সি এখানে shazron দ্বারা প্রদর্শিত https://github.com/shazron/WKWebViewFIleUrlTest করার মধ্যে ফাইল কপি /tmp/wwwএবং তাদের সেখান থেকে লোড

আপনি যদি সুইফটে কাজ করছেন, আপনি পরিবর্তে nachos4d এর নমুনা চেষ্টা করতে পারেন । (এটি শ্যাজারনের নমুনার চেয়েও খাটো, সুতরাং যদি আপনাকে শ্যাজারনের কোড নিয়ে সমস্যা হয় তবে পরিবর্তে চেষ্টা করে দেখুন))


1
একটি কার্যবিধির (এখানে উল্লেখ করা হয়েছে: devforums.apple.com/message/1051027 ) বিষয়বস্তু টিএমপি- তে সরানো এবং সেখান থেকে অ্যাক্সেস করা। আমার দ্রুত পরীক্ষার থেকে বোঝা যাচ্ছে যে এটি কাজ করে ...
মাইক এম

6
8.1 এ স্থির নয়।
ম্যাট

1
ফাইলগুলিকে / টেম্পে সরানো আমার পক্ষে কাজ করে। কিন্তু ... আমার godশ্বর, পরীক্ষার মাধ্যমে এটি কীভাবে পেল?
গ্রেগ ম্লেটিক

1
এই নমুনাটি কেবল একটি ডেমোয়ের জন্য বেশ কয়েকটি কোড। পড়তে হবে ফাইলটি অবশ্যই ভিতরে থাকা উচিত /tmp/www/। ডিরেক্টরি তৈরি করতে NSTemporaryDirectory()এবং ব্যবহার NSFileManagerকরতে www(কারণ ডিফল্টরূপে কোনও ডিরেক্টরি নেই)। তারপরে সেখানে আপনার ফাইলটি অনুলিপি করুন এবং এখন এই ফাইলটি পড়ুন :)
nacho4d

2
8.3 এবং এটি এখনও স্থির করা হয়নি ...?
নিনজিনার

8

আইওএস 9 এ কীভাবে [ডাব্লুউইউভিউভিউ লোডফাইআরএল: অনুমতিপ্রাপ্তআড্যাক্সেসটিওআরএল:] ব্যবহার করবেন তার একটি উদাহরণ ।

যখন আপনি ওয়েব ফোল্ডারটিকে কোনও প্রকল্পে নিয়ে যাচ্ছেন, "ফোল্ডার রেফারেন্স তৈরি করুন" নির্বাচন করুন

এখানে চিত্র বর্ণনা লিখুন

তারপরে কোডটি ব্যবহার করুন যা এরকম কিছু (সুইফট 2):

if let filePath = NSBundle.mainBundle().resourcePath?.stringByAppendingString("/WebApp/index.html"){
  let url = NSURL(fileURLWithPath: filePath)
  if let webAppPath = NSBundle.mainBundle().resourcePath?.stringByAppendingString("/WebApp") {
    let webAppUrl = NSURL(fileURLWithPath: webAppPath, isDirectory: true)
    webView.loadFileURL(url, allowingReadAccessToURL: webAppUrl)
  }
}

এইচটিএমএল ফাইলটিতে এই জাতীয় ফাইলপথ ব্যবহার করুন

<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">

এটার মত না

<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet">

এক্সকোড প্রকল্পে স্থানান্তরিত হওয়া ডিরেক্টরিটির একটি উদাহরণ।

এখানে চিত্র বর্ণনা লিখুন


6

অস্থায়ী কর্মক্ষেত্র : আমি জিসিডিওয়েবার সার্ভার ব্যবহার করছি , গাইডো এমবি দ্বারা প্রস্তাবিত হিসাবে।

আমি প্রথমে আমার বান্ডিলযুক্ত "www /" ফোল্ডারের পথ খুঁজে পাই (এতে একটি "index.html" রয়েছে):

NSString *docRoot = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"].stringByDeletingLastPathComponent;

... তারপরে এটি শুরু করুন:

_webServer = [[GCDWebServer alloc] init];
[_webServer addGETHandlerForBasePath:@"/" directoryPath:docRoot indexFilename:@"index.html" cacheAge:3600 allowRangeRequests:YES];
[_webServer startWithPort:port bonjourName:nil];

এটি বন্ধ করার জন্য:

[_webServer stop];
_webServer = nil;

পারফরম্যান্স সূক্ষ্ম প্রদর্শিত হয়, এমনকি একটি আইপ্যাড 2 এ।


অ্যাপটি ব্যাকগ্রাউন্ডে যাওয়ার পরে আমি একটি ক্র্যাশ লক্ষ্য করেছি, তাই আমি এটিকে বন্ধ করি applicationDidEnterBackground:এবং applicationWillTerminate:; আমি এটিকে শুরু / পুনরায় চালু করি application:didFinishLaunching...এবং applicationWillEnterForeground:


1
একটি "সার্ভার" ব্যবহার করা সম্ভবত যে কোনও কার্যকারিতা সুবিধা WKWebViewসরবরাহ করে UIWebView। এটি ঠিক না হওয়া পর্যন্ত পুরানো এপিআইয়ের সাথে লেগে থাকতে পারে।
রে

@ray একটি একক পৃষ্ঠা অ্যাপ্লিকেশন সহ নয়।
ইথানবি

আমি আমার অ্যাপ্লিকেশনটির অভ্যন্তরীণ বিল্ডগুলিতে খুব বেশি কাজ করতে জিসিডিওয়েবার সার্ভার পেয়েছি। এবং যদি আপনার অ্যাপ্লিকেশনটিতে জাভাস্ক্রিপ্ট প্রচুর থাকে তবে সার্ভারটি একেবারেই মূল্যবান। তবে এমন অন্যান্য সমস্যা রয়েছে যা এই মুহুর্তে আমাকে ডাব্লুউইউবিউ ভিউ ব্যবহার করা থেকে বিরত করছে, তাই আমি আইওএস 9
টম হামিং

এবং কীভাবে এটি একটি ওয়েবভিউতে দেখানো যায়? আমি সত্যিই বুঝতে পারি না জিসিডি ওয়েবে সার্ভারটি কী জন্য?
chipbk10

1
ওয়েবভিউটিকে "ফাইল: // ....." এ নির্দেশ করার পরিবর্তে আপনি এটিকে "http: // লোকালহোস্ট: <port> / ..." এ দেখান।
ইথানবি

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

এটি আমার জন্য iOS 8.0+ dev.apple.com সমস্যাটি সমাধান করেছে

এটিও ঠিক কাজ করেছে বলে মনে হচ্ছে ...

NSString* FILE_PATH = [[[NSBundle mainBundle] resourcePath]
                       stringByAppendingPathComponent:@"htmlapp/FILE"];
[self.webView
    loadFileURL: [NSURL fileURLWithPath:FILE_PATH]
    allowingReadAccessToURL: [NSURL fileURLWithPath:FILE_PATH]
];

ফাইলের পরিবর্তে আপনি ডিআইআরও লাগাতে পারেন।
নালকবে

এটি একটি দুর্দান্ত সন্ধান। কেন এটি বেশি ভোট দেওয়া হয় তা আমি জানি না।
plivesey

এই পোস্টটি আরো তথ্য (WebKit উৎস লিঙ্ক সহ) আছে: stackoverflow.com/questions/36013645/...
plivesey

কনফিগারেশন.ফরফারেন্সস সেটভ্যালু আইওএস 9.3
বিগনেশ কুমার

আমি আইওএস 13 এসডিকে ব্যবহার করছি তবে আইওএস 8 এর সাথে সামঞ্জস্য রাখতে চেষ্টা করছি এবং এর allowFileAccessFromFileURLsসাথে ক্র্যাশ হয়ে গেছে NSUnknownKeyException
arlomedia

4

ড্যান ফাবুলিচ দ্বারা উল্লিখিত সমাধানগুলি ছাড়াও, এক্স ওয়েবভিউ হ'ল আরেকটি কাজ। [WKWebView loadFileURL: allowingReadAccessToURL:] হয় এক্সটেনশন মাধ্যমে বাস্তবায়িত


1
এই সমস্যার জন্য অন্যান্য ওয়ার্ক-এভারসুডগুলি দেখার পরে আমি এক্সওয়েবভিউটি ব্যবহার করার সিদ্ধান্ত নিয়েছি। এক্সউইউভিউউফ একটি সুইফট বাস্তবায়িত একটি কাঠামো তবে আমার আইওএস 8 অবজেক্টিভ-সি অ্যাপ্লিকেশনটিতে এটি ব্যবহার করতে আমার কোনও সমস্যা হয়নি।
chmaynard

4

আমি এখনও মন্তব্য করতে পারি না, তাই আমি এটি আলাদা উত্তর হিসাবে পোস্ট করছি।

এটি nacho4d এর সমাধানের একটি উদ্দেশ্য-সি সংস্করণ । আমি এখন পর্যন্ত সবচেয়ে ভাল কাজ দেখেছি।

- (NSString *)pathForWKWebViewSandboxBugWithOriginalPath:(NSString *)filePath
{
    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"www"];
    NSError *error = nil;

    if (![manager createDirectoryAtPath:tempPath withIntermediateDirectories:YES attributes:nil error:&error]) {
        NSLog(@"Could not create www directory. Error: %@", error);

        return nil;
    }

    NSString *destPath = [tempPath stringByAppendingPathComponent:filePath.lastPathComponent];

    if (![manager fileExistsAtPath:destPath]) {
        if (![manager copyItemAtPath:filePath toPath:destPath error:&error]) {
            NSLog(@"Couldn't copy file to /tmp/www. Error: %@", error);

            return nil;
        }
    }

    return destPath;
}

1
আমি এটি সিমুলেটারে আইওএস 8 এ কাজ করতে পারি না। আমি / tmp / www এ একটি .png লাগাতে চাই এবং তারপরে আমার এইচটিএমএলে img ট্যাগ ব্যবহার করতে চাই। Img ট্যাগ src এর জন্য আমার কী ব্যবহার করা উচিত?
ব্যবহারকারী3246173

আমার যা দরকার ছিল ঠিক তাই ছিল ধন্যবাদ!
টিঙ্কারবেল

3

আপনি যদি বৃহত্তর এইচটিএমএল স্ট্রিংয়ের মাঝে একটি স্থানীয় চিত্র প্রদর্শন করার চেষ্টা করছেন যে ক্ষেত্রে: <img src="file://..."> এটি ডিভাইসে এখনও উপস্থিত হয় না তাই আমি ইমেজ ফাইলটি এনএসডিটাতে লোড করেছি এবং এর সাথে এসসিআর স্ট্রিংটি প্রতিস্থাপন করে এটি প্রদর্শন করতে সক্ষম হয়েছি তথ্য নিজেই। এইচটিএমএল স্ট্রিংকে ডাব্লুউইউইউভিউ ভিউতে লোড করতে সহায়তা করার জন্য নমুনা কোড, যেখানে ফলাফলটি এসসিআর = "" এর উদ্ধৃতিগুলির ভিতরে কী প্রতিস্থাপন করবে:

সুইফট:

let pathURL = NSURL.fileURLWithPath(attachmentFilePath)
guard let path = pathURL.path else {
    return // throw error
}
guard let data = NSFileManager.defaultManager().contentsAtPath(path) else {
    return // throw error
}

let image = UIImage.init(data: data)
let base64String = data.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
result += "data:image/" + attachmentType + "base64," + base64String

var widthHeightString = "\""
if let image = image {
    widthHeightString += " width=\"\(image.size.width)\" height=\"\(image.size.height)\""
}

result += widthHeightString

উদ্দেশ্য গ:

NSURL *pathURL = [NSURL fileURLWithPath:attachmentFilePath];
NSString *path = [pathURL path];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];

UIImage *image = [UIImage imageWithData:data];
NSString *base64String = [data base64EncodedStringWithOptions:0];
[result appendString:@"data:image/"];
[result appendString:attachmentType]; // jpg, gif etc.
[result appendString:@";base64,"];
[result appendString:base64String];

NSString *widthHeightString = @"\"";
if (image) {
    widthHeightString = [NSString stringWithFormat:@"\" width=\"%f\" height=\"%f\"", image.size.width, image.size.height];
}
[result appendString:widthHeightString];

সুইফ্ট সংস্করণে, দয়া করে বেস 64 এর আগে একটি সেমিকোলন যুক্ত করুন। result += "data:image/" + attachmentType + ";base64," + base64String
শাহিল

ধন্যবাদ, এটি শুধু আমার জন্য কাজ, কারন আমি ডিভাইসে একটি টেম্প ফোল্ডারে একটি .gif ফাইল ডাউনলোড, এবং তারপর ঐ ফাইলটি লোড হয় WKWebViewএকটি যেমন <img>একটি HTMLstring মধ্যে।
মিস্টার জিস্টেম

1

আমি নীচে ব্যবহার করছি। আমি কাজ করছি এমন কিছু অতিরিক্ত জিনিস রয়েছে তবে আপনি দেখতে পাবেন যেখানে আমি লোডরয়েউয়েস্টটি মন্তব্য করেছি এবং লোড এইচটিএমএল স্ট্রিং কলটি প্রতিস্থাপন করছি। আশা করি তারা বাগটি ঠিক না করা পর্যন্ত এটি সহায়তা করে।

import UIKit
import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {

    var theWebView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

        var path = NSBundle.mainBundle().pathForResource("index", ofType: "html", inDirectory:"www" )
        var url = NSURL(fileURLWithPath:path)
        var request = NSURLRequest(URL:url)
        var theConfiguration = WKWebViewConfiguration()

        theConfiguration.userContentController.addScriptMessageHandler(self, name: "interOp")

        theWebView = WKWebView(frame:self.view.frame, configuration: theConfiguration)

        let text2 = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)

        theWebView!.loadHTMLString(text2, baseURL: nil)

        //theWebView!.loadRequest(request)

        self.view.addSubview(theWebView)


    }

    func appWillEnterForeground() {

    }

    func appDidEnterBackground() {

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func userContentController(userContentController: WKUserContentController!, didReceiveScriptMessage message: WKScriptMessage!){
        println("got message: \(message.body)")

    }

}

3
এটি কেবলমাত্র এইচটিএমএল ফাইলের জন্য কাজ করছে বলে মনে হয় তবে অন্যান্য সংস্থানগুলিতে নয়।
লিম থিয়ে চিয়ান

1

কারা অবশ্যই iOS8 এর অধীনে এই সমস্যাটি সমাধান করতে হবে:

যদি আপনার পৃষ্ঠাটি জটিল না হয় তবে আপনি পৃষ্ঠাটিকে একটি একক পৃষ্ঠা অ্যাপ্লিকেশন হিসাবে বেছে নিতে বেছে নিতে পারেন।

অন্য কথায়, এইচটিএমএল ফাইলে সমস্ত সংস্থানগুলি এম্বেড করতে।

করণীয়: 1. আপনার জেএস / সিএসএস ফাইলের বিষয়বস্তু যথাক্রমে এইচটিএমএল ফাইলটিতে / ট্যাগগুলিতে অনুলিপি করুন; ২. সেই অনুযায়ী প্রতিস্থাপন করতে আপনার চিত্র ফাইলগুলিকে এসজিগিতে রূপান্তর করুন। ৩. উদাহরণস্বরূপ, [ওয়েবভিউ লোড এইচটিএমএল স্ট্রিং: বেস ইউআরএল:] ব্যবহার করে পৃষ্ঠাটি পূর্বের মতো লোড করুন

এটি একটি এসভিজি চিত্র স্টাইল করার চেয়ে কিছুটা আলাদা ছিল তবে এটি আপনাকে এতটা ব্লক করা উচিত নয়।

দেখে মনে হয়েছিল যে পৃষ্ঠার রেন্ডার পারফরম্যান্সটি কিছুটা হ্রাস পেয়েছে, তবে আইওএস 8/9/10 এর অধীনে এমন একটি সাধারণ কাজ করার উপযুক্ত ছিল।


0

GCDWebServer এর একই লাইনে, আমি এসিআইপিএলএইচটিপিএস সার্ভার ( http://www.andyjamesdavies.com/blog/javascript/simple-http-server-on-mac-os-x-in-seconds ) এবং তারপরে লোকালহোস্টের সাথে লোড রিকুইয়েস্ট ব্যবহার করছি URL। এই পদ্ধতির সাথে আপনাকে কোনও লাইব্রেরি যুক্ত করতে হবে না, তবে ওয়েবসাইট ফাইলগুলি বান্ডলে থাকবে না তাই এটি সরবরাহযোগ্য হবে না। যে কারণে, এটি ডিবাগ মামলার জন্য আরও উপযুক্ত হবে।


0

আমি ওএস এক্সে পিএইচপি এর ওয়েব সার্ভার ব্যবহার করতে সক্ষম হয়েছি the অস্থায়ী / www ডিরেক্টরিতে অনুলিপি করা আমার পক্ষে কার্যকর হয়নি। পাইথন সিম্পল এইচটিটিপিএস সার্ভার এমআইএমআই টাইপগুলি পড়ার ইচ্ছে সম্পর্কে অভিযোগ করেছিল, সম্ভবত একটি স্যান্ডবক্সিংয়ের সমস্যা।

এখানে একটি সার্ভার ব্যবহার করছে php -S:

let portNumber = 8080

let task = NSTask()
task.launchPath = "/usr/bin/php"
task.arguments = ["-S", "localhost:\(portNumber)", "-t", directoryURL.path!]
// Hide the output from the PHP server
task.standardOutput = NSPipe()
task.standardError = NSPipe()

task.launch()

0

@ nacho4d সমাধানটি ভাল। আমি এটি একটু পরিবর্তন করতে চাই তবে আপনার পোস্টে কীভাবে এটি পরিবর্তন করতে হয় তা আমি জানি না। তাই আমি এটি এখানে রেখেছি আশা করি আপনি আপত্তি করবেন না। ধন্যবাদ।

আপনার কাছে যদি একটি www ফোল্ডার রয়েছে তবে আরও অনেকগুলি ফাইল যেমন পিএনজি, সিএসএস, জেএস ইত্যাদি রয়েছে তারপরে আপনাকে সমস্ত ফাইলগুলি কপি করতে হবে tmp / www ফোল্ডারে। উদাহরণস্বরূপ, আপনার মতো একটি www ফোল্ডার রয়েছে: এখানে চিত্র বর্ণনা লিখুন

তারপরে সুইফট ২.০ এ:

override func viewDidLoad() {
    super.viewDidLoad()

    let path = NSBundle.mainBundle().resourcePath! + "/www";
    var fileURL = NSURL(fileURLWithPath: path)
    if #available(iOS 9.0, *) {
        let path = NSBundle.mainBundle().pathForResource("index", ofType: "html", inDirectory: "www")
        let url = NSURL(fileURLWithPath: path!)
        self.webView!.loadRequest(NSURLRequest(URL: url))
    } else {
        do {
            fileURL = try fileURLForBuggyWKWebView8(fileURL)
            let url = NSURL(fileURLWithPath: fileURL.path! + "/index.html")
            self.webView!.loadRequest( NSURLRequest(URL: url))
        } catch let error as NSError {
            print("Error: \(error.debugDescription)")
        }
    }
}

ফাংশন ফাইল ইউআরএলফোর্ডব্যাগি ডাব্লুউইউভিউ ভিউ 8 @ nacho4d থেকে অনুলিপি করা হয়েছে:

func fileURLForBuggyWKWebView8(fileURL: NSURL) throws -> NSURL {
    // Some safety checks
    var error:NSError? = nil;
    if (!fileURL.fileURL || !fileURL.checkResourceIsReachableAndReturnError(&error)) {
        throw error ?? NSError(
            domain: "BuggyWKWebViewDomain",
            code: 1001,
            userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("URL must be a file URL.", comment:"")])
    }

    // Create "/temp/www" directory
    let fm = NSFileManager.defaultManager()
    let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory())
    try! fm.createDirectoryAtURL(tmpDirURL, withIntermediateDirectories: true, attributes: nil)

    // Now copy given file to the temp directory
    let dstURL = tmpDirURL.URLByAppendingPathComponent(fileURL.lastPathComponent!)
    let _ = try? fm.removeItemAtURL(dstURL)
    try! fm.copyItemAtURL(fileURL, toURL: dstURL)

    // Files in "/temp/www" load flawlesly :)
    return dstURL
}

-1

ব্যবহার করার চেষ্টা করুন

[webView loadHTMLString:htmlFileContent baseURL:baseURL];

মনে হচ্ছে এটি এখনও কাজ করছে। এখনো.


ধন্যবাদ আমি এটি চেষ্টা করব।
লিম থিয়ে চেন

3
এটি কেবল এইচটিএমএল ফাইলের জন্য কাজ করে নিজেই কি সংস্থানগুলি, তাই না?
লিম থিয়ে চিয়ান

1
দুর্ভাগ্যক্রমে হ্যাঁ, কেবল HTML ফাইলটি লোড হচ্ছে বলে মনে হচ্ছে। আসুন আশা করি এটি কেবল একটি ত্রুটি, এবং স্থানীয় ফাইলগুলি লোড করার ক্ষেত্রে নতুন বিধিনিষেধ নয়। আমি ওয়েবকিট উত্সগুলিতে এই বাগটি অনুসন্ধান করার চেষ্টা করছি।
ওলেকসেই

1
আমি একই সমস্যাটিতে চলে এসেছি - এইচটিএমএল ফাইলগুলি লোড হয়েছে তবে স্থানীয় ফাইল সিস্টেমে থাকা চিত্রগুলি এবং অন্যান্য সংস্থানগুলি লোড হয় না। কনসোলে, ওয়েবকিট একটি ত্রুটি ফেলছে "স্থানীয় সংস্থান লোড করার অনুমতি নেই"। আমি এর জন্য একটি বাগ দায়ের করেছি, রাডার # 17835098
মিস্জারো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.