รับ URL ปัจจุบันของ UIWebView


110

ฉันได้ลองรับ URL ปัจจุบันของฉันUIWebViewด้วย: webview.request.URL. น่าเสียดายที่NSURLว่างเปล่า มีอะไรผิดปกติที่นี่? ฉันกำลังทำงานกับ Xcode 3.2.2 beta 5

โค้ดข้างต้นควรจะดำเนินการในผู้ร่วมประชุมUIWebViewdidStartLoad


ทำรหัสนั้น currentURL = currentWebView.request.URL.absoluteString; หลังจากการดูเว็บของคุณโหลดแล้วให้ใช้ - (โมฆะ) webViewDidFinishLoad: (UIWebView *) webView บางทีนี่อาจช่วยได้
Xcoder

OP เมื่อพิจารณาจากคำถามนี้มีผู้เข้าชม 78,000 ครั้งซึ่งเป็นการอ้างอิงที่ค่อนข้างดี คุณช่วยปรับปรุงคำตอบที่ได้รับการยอมรับสำหรับคำตอบที่ได้รับการโหวตมากขึ้นเพื่อป้องกันความสับสนในอนาคตหรือไม่? ขอบคุณ!
Albert Renshaw

คำตอบ:


45

รุ่นของ Mattสะอาดกว่ามาก ฉันแนะนำให้ทุกคนใช้อันนั้นแทนอันนี้

คุณสามารถลองสิ่งนี้:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

ขอบคุณ. โค้ดด้านบนของฉันใช้งานได้เมื่อเรียกใช้งานใน didFinishLoad .... บางที่ฉันอ่านพบว่าเวอร์ชัน js ใช้ไม่ได้ในทุกหน้า แต่ฉันจะพยายาม
danielreiser

11
Matt เวอร์ชั่นของเขาสะอาดกว่ามาก ใช่ฉันแนะนำให้ทุกคนใช้อันนั้นแทนอันนี้
ผู้โดยสาร

1
นี่เป็นวิธีเดียวที่ใช้ได้เช่นใน m.youtube.com คำตอบอื่น ๆ ทั้งหมดแสดง URL ผิด
cprcrack

2
จริงๆแล้วฉันประเมิน "document.URL" ไม่ใช่ "window.location" (ซึ่งว่างเสมอสำหรับฉัน) สิ่งนี้มีประโยชน์สำหรับการปรับเปลี่ยนภายในของ URL ของหน้าบนไซต์ JS ขนาดใหญ่ที่อาจไม่ใช้การโหลดหน้าแบบเดิม
SmartyP

1
สำหรับสองคนข้างต้น - Aubada Taljo และ Taranfx - Rengers ได้ตั้งข้อสังเกตอย่างกล้าหาญ (ตัวอักษรเป็นตัวหนา) และด้วยความนอบน้อมว่าผู้คนควรใช้เวอร์ชันของ Matt ที่มียอดไลค์มากกว่า 230 รายการด้านล่าง เห็นได้ชัดว่าในขณะที่ตอบคำถามนี้ได้ผลและได้รับการยอมรับและผู้คน 30+ คนก็รู้สึกว่าได้ผลเช่นกัน ตอนนี้อายุ 5.5 ปี ของดี Rengers. ขอขอบคุณที่ชี้ให้ผู้อื่นดูคำตอบของ Matt ด้านล่าง
App Dev Guy

317

window.location ผ่าน JS ใช้งานไม่ได้สำหรับฉัน แต่สิ่งนี้ทำได้:

currentURL = currentWebView.request.URL.absoluteString;

เครดิต: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
คุณจะได้รับ URL ที่ไม่ถูกต้องหากไซต์ของคุณโหลดโฆษณาบางรายการในคำขออื่น ตัวแปรที่ชัดเจนมากขึ้นเขียนโดยMark Sands
OdNairy

ใช้ไม่ได้กับผลการค้นหาของ Google ในขณะที่เข้าถึงผลการค้นหาจาก Google มันกำลังแสดง URL ของ Google ไม่ใช่ URL ของหน้าผลการค้นหา ความช่วยเหลือใด ๆ .........
Nirav Gadhiya

@iOSDeveloper Google อาจใช้สถานะพุช "HTML5" เพื่อจัดการ URL ซึ่งไม่เกี่ยวข้องกับการดำเนินการตามคำขออื่น (ดังนั้น WebView.request ปัจจุบันจึงไม่ได้รับการอัปเดต)
danw

3
วิธีนี้ดูเหมือนจะใช้ไม่ได้หากเว็บไซต์ทำ history.pushState
andrrs

1
ใน Swift 4: webView.request? .mainDocumentURL? .absoluteString
DmitryKanunnikoff

55

นี่คือรหัสที่ฉันใช้เพื่อดึง url ทุกครั้งที่คุณไปที่ลิงค์อื่นภายใน webview:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

เมื่อฉันลองวิธีนี้วิธีนี้จะไม่ถูกเรียก มีบางอย่างที่ฉันอาจขาดหายไปหรือไม่?
Greg

1
@greg ตรวจสอบให้แน่ใจว่าคุณได้ตั้งตัวเองเป็นตัวแทนของ UIWebView
bendytree

1
สิ่งนี้ใช้ได้ผลสำหรับฉันในขณะที่webView.request.URL.absoluteStringกลับมาnil
bendytree

ขอบคุณสิ่งนี้ใช้ได้กับฉันเช่นกันและมันดีกว่า currentWebView.request.URL.absoluteString;
เว็บฮอบบิท

36

ฉันก็พบว่าคำตอบที่ได้รับอนุมัติข้างต้นไม่น่าเชื่อถือ แต่ด้วยการปรับเปลี่ยนเล็กน้อยดูเหมือนว่าจะได้ผลทุกครั้ง:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

สังเกตการเพิ่ม ".href" ลงใน Javascript เนื่องจากสิ่งนี้ซ่อนอยู่ที่ท้ายบรรทัดของโค้ด


2
ขอบคุณ SarahR วิธีการของคุณใช้งานได้แม้ว่า UIWebView จะโหลดหน้าเพียงบางส่วน
Dmitry Makarenko

18

สิ่งนี้ไม่ถูกต้องและจะคืนค่าศูนย์:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

อย่างไรก็ตามโค้ดด้านล่างสามารถรับ URL ได้ แต่ URL อาจไม่ใช่ URL ปัจจุบัน:

NSString *url = _webView.request.URL.absoluteString;

สิ่งที่ถูกต้องคือ:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];


4

ลองสิ่งนี้สำหรับผลการค้นหาของ Google บน iPhone:

 NSString* currentURL = webView.request.URL.absoluteString;
 NSString* mainDocumentURL = webView.request.mainDocumentURL.absoluteString;

ทั้งคู่กลับมาเหมือนเดิม!


3

นี่คือรหัสที่ฉันใช้:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];

5
คุณกำลังสร้าง NSURL โดยรับสตริงจาก NSURL ที่มีอยู่ คุณไม่สามารถคัดลอกได้webView.request.URLหรือไม่
Pascal


2

ฉันใช้shouldStartLoadWithRequestเหตุการณ์ (UIWebViewDelegate) เพื่อตรวจจับการอัปเดต URL request.mainDocumentURL.absoluteStringจะทำให้คุณได้รับ URL ของหน้าเว็บหลัก (ซึ่งโดยปกติคือสิ่งที่คุณต้องการ) ในขณะที่request.URL.absoluteStringจะมี CSS และ JavaScript รวมอยู่ด้วย



2

ใช้วิธีการมอบหมาย

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString  *URL = request.URL.absoluteString;    NSLog(@"%@",URL);
}

URL คือสิ่งที่คุณต้องการอย่างแท้จริง



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.