ইউকেউইউভিউ'র স্কেলপেজটিওফিটের সমতুল্য WKWebView V


97

আমি প্রতিস্থাপন করতে আমার iOS অ্যাপ্লিকেশন আপডেট করার am UIWebViewসঙ্গে WKWebView। তবে কীভাবে একই আচরণ অর্জন করব তা আমি বুঝতে পারি না WKWebView। সঙ্গে UIWebViewআমি ব্যবহৃত scalesPageToFit(তাই হিসাবে স্ক্রলিং ছাড়া পূর্ণ পর্দায় প্রদর্শিত) নিশ্চিত করার ওয়েব Pag স্ক্রিন সাইজ হিসাবে একই আকার সঙ্গে প্রদর্শিত হতে থাকে।

ওয়েবে এটি সমাধান পেয়েছি তবে এটি কার্যকর হয় না:

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
    NSString *javascript = @"var meta = document.createElement('meta');meta.setAttribute('name', 'viewport');meta.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');document.getElementsByTagName('head')[0].appendChild(meta);";
    [webView evaluateJavaScript:javascript completionHandler:nil];
}

এটি চেষ্টা করুন: NSString* js = @"var meta = document.createElement('meta'); " "meta.setAttribute( 'name', 'viewport' ); " "meta.setAttribute( 'content', 'width = device-width' ); " "document.getElementsByTagName('head')[0].appendChild(meta)"; [webView stringByEvaluatingJavaScriptFromString: js];উপরের কোড সহ আপনার কোডটি প্রতিস্থাপন করুন।
z22

আমি চেষ্টা করেছিলাম কিন্তু আমার একই ফলাফল রয়েছে (উপায় দ্বারা, স্ট্রিংবাইয়েভালটিং জাভাস্ক্রিপ্ট থেকে স্ট্রিং পদ্ধতি WKWebView তে বিদ্যমান নেই তাই আমি আমার মূল্যায়ন রেখেছি জাভাস্ক্রিপ্ট: সমাপ্তি
হ্যান্ডলার

4
আপনি কি সমাধান পেয়েছেন?
anoop4real

উত্তর:


128

আপনি ডাব্লুউকিউসারস্ক্রিপ্টও চেষ্টা করে দেখতে পারেন।

এখানে আমার কাজের কনফিগারেশন:

NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
wkWebConfig.userContentController = wkUController;

wkWebV = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig];

আপনি আপনার WKWebViewConfigration- এ অতিরিক্ত কনফিগারেশন যুক্ত করতে পারেন।


4
একটি যাদুমন্ত্র মত কাজ করে. ধন্যবাদ
নীতিন পাই

4
আমার জন্য দুর্দান্ত কাজ করে - কেবলমাত্র সামান্য ত্বক ডাব্লুউইউএসএসরস্ক্রিপ্টআইজেক্টটাইমএট ডকুমেন্টএন্ড ও ডাব্লুউইউএসএসর
স্ক্রিপ্ট ইনজেকশনটাইমএট

4
আমি যদি তখন পরিবর্তন WKUserScriptInjectionTimeAtDocumentEndকরি WKUserScriptInjectionTimeAtDocumentStartতবে এটি আমার পক্ষে কাজ করে না। এটি এই স্ক্রিপ্টটি যুক্ত করে না। যে কোন কারন?
মহেশ কে 18

4
উত্তম উত্তর, তবে আমি নিজেও ফন্টের আকার পরিবর্তন করে ওয়েবকিট এড়াতে এই স্ক্রিপ্টটি যুক্ত করব:var style = document.createElement('style');style.innerHTML = 'body { -webkit-text-size-adjust: none; }';document.getElementsByTagName('head')[0].appendChild(style);
জোসে ম্যানুয়েল সানচেজ

4
এটি দুর্দান্ত কাজ করেছে। আমি WKWebView ব্যবহার করে অটো লেআউট দিয়ে একটি বিশেষ শিরোনাম প্রান্তিককরণের চেষ্টা করছিলাম। আমি এই স্ক্রিপ্টটি যোগ না করা পর্যন্ত অফসেটহাইট থেকে উপাদানটির উচ্চতা আবারও ফিরে আসতে থাকবে। সাহায্যের জন্য ধন্যবাদ.
জামওয়িলস

44

সুইফার কোডে nferocious76 এর উত্তরের প্রতিধ্বনি: Swift2.x সংস্করণ

let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
let userScript = WKUserScript(source: jscript, injectionTime: WKUserScriptInjectionTime.AtDocumentEnd, forMainFrameOnly: true)
let wkUController = WKUserContentController()
wkUController.addUserScript(userScript)
let wkWebConfig = WKWebViewConfiguration()
wkWebConfig.userContentController = wkUController
let youWebView = WKWebView(frame: CGRectZero, configuration: wkWebConfig)

swift3 সংস্করণ

let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let wkUController = WKUserContentController()
wkUController.addUserScript(userScript)
let wkWebConfig = WKWebViewConfiguration()
wkWebConfig.userContentController = wkUController
let yourWebView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)

20

@ Nferocious76 এর মত তবে সুইফ্ট ভাষায়

var scriptContent = "var meta = document.createElement('meta');"
scriptContent += "meta.name='viewport';"
scriptContent += "meta.content='width=device-width';"
scriptContent += "document.getElementsByTagName('head')[0].appendChild(meta);"

webView.evaluateJavaScript(scriptContent, completionHandler: nil)

ধন্যবাদ! এটি এইচটিএমএল ফন্টের আকারকে আরও বড় করতে, ছোট থেকে বড়কে রিফ্রেশ না করার জন্যও আমার সমস্যার সমাধান করেছে। আমি এটি কনটেন্ট ফন্টের আকার এবং অভ্যন্তরের বিন্যাসটিকে "রিফ্রেশ" করতে ব্যবহার করছি।
নাদি হাসান

12

সি # সংস্করণ, জামারিন কাস্টম রেন্ডারারে ব্যবহারের জন্য:

string jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

WKUserScript wkUScript = new WKUserScript((NSString)jScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
WKUserContentController wkUController = new WKUserContentController();
wkUController.AddUserScript(wkUScript);

WKWebViewConfiguration wkWebConfig = new WKWebViewConfiguration();
wkWebConfig.UserContentController = wkUController;
WKWebView webView=new WKWebView(Frame, wkWebConfig);

মোহন মত কাজ!
Divyesh_08

কাস্টম রেন্ডারার কেমন দেখাচ্ছে? আপনি কি উত্তরাধিকারসূত্রে থেকে WkWebViewRenderer? কারণ Controlভাল হিসাবে হিসাবে SetNativeControl()অজানা ...
পরীক্ষার

ঠিক আছে বলে মনে হচ্ছে আপনার উত্তরাধিকার সূত্রে ViewRenderer<CustomWebView, WKWebView>ব্যবহার এবং ব্যবহার করা দরকার OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
পরীক্ষা করা

11

আমি আত্মার নীচে চিন্তা। সামগ্রীটি ডিভাইসের আকারের সাথে ফিট করার জন্য।

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {     for making the content to fit with the device size
    let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
    webView.evaluateJavaScript(jscript)
}

6

আমার এইচটিএমএল স্ক্রিপ্টে নীচে যুক্ত করা আমাকে সহায়তা করেছে।

<meta name="viewport" content="width=device-width, shrink-to-fit=YES">

এটি ইউআইবিউবভিউতে স্কেলপেজটফিট হিসাবে একই কাজ করে।

উল্লেখ করুন: আইওএস ডাব্লুওয়াকউইভিউ জুম স্কেল কীভাবে সেট করবেন



1

আমার জন্য এই কাজটি, আমি মেটাতে দুটি বৈশিষ্ট্য যুক্ত করেছি:, initial-scale=1.0, shrink-to-fit=yesএইচটিএমএল সহ মাপসই পাঠ্যের এইচটিএমএলে একটি বড় চিত্র রয়েছে।

let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, initial-scale=1.0, shrink-to-fit=yes'); document.getElementsByTagName('head')[0].appendChild(meta);"
        
let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)

let wkUController = WKUserContentController()
        
wkUController.addUserScript(userScript)
        
let wkWebConfig = WKWebViewConfiguration()
        
wkWebConfig.userContentController = wkUController

self.webView = WKWebView(frame: self.view.bounds, configuration: wkWebConfig)

0

// আমার জন্য 100% কাজ

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    //print(#function)
    let scriptFontSizeAdjustment = "var style = document.createElement('style');style.innerHTML = 'body { -webkit-text-size-adjust: none; }';document.getElementsByTagName('head')[0].appendChild(style);"

    let scriptImgSizeAdjustment = "var style = document.createElement('style');style.innerHTML = 'img { display: inline;height: auto;max-width: 100%; }';document.getElementsByTagName('head')[0].appendChild(style);"

    webKitView.evaluateJavaScript(scriptFontSizeAdjustment)
    webKitView.evaluateJavaScript(scriptImgSizeAdjustment)

}

0

এই উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করছে না। আমি একটি বিশেষ শিল্পীর জন্য একটি আমাজন ইউআরএল খোলার চেষ্টা করছিলাম। দেখা যাচ্ছে যে অ্যামাজনের একটি মোবাইল প্রতিক্রিয়াশীল URL এবং একটি ডেস্কটপ URL রয়েছে। ডেস্কটপ সাফারিতে, আমি আইফোনটিতে ব্যবহারকারী-এজেন্ট হিসাবে বিকাশ করেছি (বিকাশ> ব্যবহারকারী এজেন্ট> সাফারি - আইওএস 13.1.3 - আইফোন) এবং মোবাইলের জন্য উপযুক্ত ইউআরএল পেয়েছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.