2012-02-01 8 views
9

मैं एक मैक ऐप बना रहा हूं और वेब ब्राउज़ करने और सफारी का उपयोग करते समय मानक डाउनलोड सिस्टम का उपयोग करके साइटों से फ़ाइलों को डाउनलोड करने की क्षमता शामिल करना चाहता हूं।मैक ऐप पर मानक डाउनलोड सिस्टम का उपयोग करके मैं वेबव्यू से डाउनलोड कैसे कर सकता हूं?

इस समय जब मैं ऐप में .zip या .nzb के लिंक पर क्लिक करता हूं तो यह कुछ भी नहीं करता है! क्या ऐप से इसे अनुमति देने का कोई तरीका है?

धन्यवाद किसी भी मदद :)

+0

@ (विल रॉबर्ट्स) - मैं वही कोशिश कर रहा हूं, लेकिन कुछ भी डाउनलोड करने में सक्षम नहीं हूं। क्या आप मुझे यह बता सकते हैं कि इसे कैसे प्राप्त किया जाए। मैं रोब केनिगर पद को समझने में सक्षम नहीं हूं। –

उत्तर

0

मेरे सिर के ऊपर बंद के लिए अग्रिम में मैं तुम्हें पता लगाने के लिए जब एक लिंक पर एक उपयोगकर्ता क्लिक WebView के प्रतिनिधियों को लागू कर सकता है लगता होगा - तो विस्तार की जाँच करें और अगर यह एचटीएमएल नहीं है सफ़र में

Cocoa WebKit/WebView delegate for location change? (User clicked link, javascript action, etc)

+0

आपके उत्तर के लिए धन्यवाद, इसके साथ समस्या यह है कि जिन लिंकों को मैं क्लिक करने का प्रयास कर रहा हूं, उनमें कोई एक्सटेंशन नहीं है। उदाहरण: http: //******.com/download.php? Id = 1170176 और nozip = 1 और cat = 36। –

+0

ठीक है तो आप कैसे पहचानते हैं कि कौन से लिंक डाउनलोड के लिए हैं और जो प्रदर्शन के लिए हैं? – shein

+0

फिलहाल मैं एक चेक करता हूं कि अगर यूआरएल में एक निश्चित शब्द होता है तो यह वास्तव में एक डाउनलोड लिंक है इसलिए एक्स को इसके साथ करने की आवश्यकता है! –

10

डाउनलोड प्रबंधक:/php/जो कुछ भी तो मैन्युअल रूप से फ़ाइल खुद

यहाँ डाउनलोड लिंक को कैसे दबाने पर कब्जा करने के लिए एक प्रश्न (और जवाब) का लिंक है मैं सफारी द्वारा कार्यान्वित किया गया है, वेबकिट द्वारा नहीं, इसलिए आपको उस कार्यक्षमता को "मुक्त करने" नहीं मिलता है, केवल इसे बनाने के लिए टूल।

फ़ाइलों को डाउनलोड करने में सक्षम होने के लिए, आपको WebView के WebPolicyDelegate के रूप में ऑब्जेक्ट असाइन करने और webView:decidePolicyForMIMEType:request:frame:decisionListener: प्रतिनिधि विधि को लागू करने की आवश्यकता है।

उस विधि में, आपको उस विधि पर पैरामीटर के रूप में पारित ऑब्जेक्ट पर WebPolicyDecisionListener प्रोटोकॉल विधियों में से एक को कॉल करना होगा। तीन WebPolicyDecisionListener प्रोटोकॉल विधियां ignore, use या download हैं। किसी भी MIME प्रकार है कि आप डाउनलोड करने के लिए, आप वस्तु श्रोता पैरामीटर के रूप में पारित कर दिया पर download कॉल करना होगा:

- (void)webView:(WebView *)webView 
    decidePolicyForMIMEType:(NSString *)type 
        request:(NSURLRequest *)request 
        frame:(WebFrame *)frame 
      decisionListener:(id <WebPolicyDecisionListener>)listener 
{ 
    if([type isEqualToString:@"application/zip"]) 
    { 
     [listener download]; 
    } 
    //just ignore all other types; the default behaviour will be used 
} 

तब आप अपने WebView के डाउनलोड प्रतिनिधि के रूप में एक वस्तु सौंपने होंगे। इस ऑब्जेक्ट को NSURLDownloadDelegate प्रोटोकॉल संदेशों के साथ-साथ WebDownload प्रतिनिधि संदेश भेजे जाएंगे। आप इन संदेशों का उपयोग यह चुनने के लिए कर सकते हैं कि फ़ाइल कहां डाउनलोड की गई है, साथ ही सफारी जैसे डाउनलोड मैनेजर यूआई को कार्यान्वित करने के लिए भी उपयोग कर सकते हैं।

+0

फ़ाइल के HTTP शीर्षकों का परीक्षण करना बेहतर है जैसे आपने यह घटक बनाया है। किसी भी संकेत के रूप में "सभी पकड़ो" * फाइल * कैसे? या, उलटा - "वेब पेज" कैसे पकड़ें जिसे ब्राउज़र में लोड किया जाना चाहिए? – SG1

+0

या शायद यह सही सवाल भी नहीं है, क्योंकि कुछ फाइलें (उदाहरण के लिए छवियां) उपयोगकर्ता कई बार डाउनलोड करना चाहती हैं और अन्य बार ब्राउज़र में देख सकती हैं। इसके अलावा, href लिंक में अक्सर "संकेत" होते हैं जिन्हें आइटम को देखने के बजाए डाउनलोड किया जाना चाहिए। हम्म ... अपने स्वयं के प्रश्न की तरह लगता है ... – SG1

+2

[(NSHTTPURLResponse *) [[फ्रेम अस्थायी डेटासॉर्स] प्रतिक्रिया] allHeaderFields] इस शब्दकोश में "सामग्री-विस्थापन" मानों की जांच करें। इससे आपको डाउनलोड आइटम की पहचान करने में मदद मिलेगी। –

0

एक और विकल्प बाहरी ब्राउज़र में लिंक खोलना है। और फ़ाइल बाहरी ब्राउज़र के डाउनलोड प्रबंधक का उपयोग कर डाउनलोड की जाएगी। XCode 7.3 के साथ स्विफ्ट 2.2 में

नमूना कोड:

func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) { 
    let url = request.URL!.absoluteString 
    if url.hasSuffix(".zip") || url.hasSuffix(".nzb") { 
     listener.ignore() 
     NSWorkspace.sharedWorkspace().openURL(request.URL!) 
    } else { 
     listener.use() 
    } 
} 

पी एस। ऊपर विधि WebPolicyDelegate से आता है।

संबंधित मुद्दे

 संबंधित मुद्दे