UIWebView के अंदर जावास्क्रिप्ट डिबग करने के लिए कुछ तरीके क्या हैं?


136

मैं यह पता लगाने की कोशिश कर रहा हूं कि एक UIWebView के अंदर जावास्क्रिप्ट के साथ कुछ क्यों काम नहीं कर रहा है। मेरी जानकारी के लिए, एक js फ़ाइल के लिए XCode के अंदर एक विराम बिंदु सेट करने का कोई तरीका नहीं है। कोई समस्या नहीं है, मैं अभी 2004 में वापस जाऊंगा और सतर्क राज्यकर्मियों का उपयोग करूंगा- ओह प्रतीक्षा करें कि वे UIWebView के अंदर काम न करें!

केवल एक चीज जिसके बारे में मैं सोच सकता था, वह है मेरे HTML और JS फाइल को अपने डेस्कटॉप पर निर्यात करना और फिर सफारी के अंदर अपना डिबगिंग करना। और वह काम करता है! लेकिन बेशक, मैं UIWebView में जिस बग के साथ लड़ रहा हूं वह सफारी में नहीं होता है।

क्या UIWebView के अंदर डिबगिंग के लिए कोई अन्य तरीके हैं, या ऐसी कोई ट्रिक्स जो मैं पुराने स्कूल के अलर्ट विधि का उपयोग करने के लिए उपयोग कर सकता हूं?

जवाबों:


277

यदि आप iOS> = 6 का उपयोग कर रहे हैं और आपके पास पहाड़ी शेर (10.8) या सफारी> = 6 है, तो आप बस:

  1. सिम्युलेटर में आवेदन खोलें (या XCode> = 4.5.x में आपका डिवाइस)।
  2. ओपन सफारी (पर जाएं Preferences -> Advancedऔर मेन्यूबार में "शो डिवेलप्ड मेन्यू दिखाएं" पर जाएं।
  3. मेनू-बार (सफारी के) से चुनें Develop -> iPhone Simulator -> [your webview page]

बस !


6
यह केवल तभी काम करता है जब सिम्युलेटर में ऐप चला रहे हों। यदि आप डीबगिंग के लिए iOS डिवाइस का उपयोग करते हैं, तो इस दृष्टिकोण को देखें mobiarch.wordpress.com/2013/04/06/…
RajV

7
@RajV आप एक भौतिक डिवाइस पर UIWebViews डीबग कर सकते हैं, लेकिन केवल जिन्हें आप सीधे अपने डिवाइस पर XCode के साथ रखते हैं, ऐपस्टोर से नहीं।
alecail

1
बहुत स्पष्ट है, लेकिन यह मददगार हो सकता है। मैंने iOS7 सिमुलेटर पर OSX 10.9 Mavericks और Safari 7 - खूबसूरती से काम करते हुए यह परीक्षण किया है। इसके लिए धन्यवाद।
Moe

1
@refaelos धन्यवाद !! अगर मैं विकास के अनंतिम प्रोफ़ाइल का उपयोग करता हूं, तो यह मेरे भौतिक उपकरण के साथ काम कर रहा है।
umang2203

11
सिम्युलेटर पर यकीन नहीं है, लेकिन इस डिवाइस पर काम करने के लिए आपको सेटिंग्स में सक्षम करने का विकल्प है। Settings> Safari> Advanced> Web Inspector<- यह सक्षम
होडसन

31

यह क्वेरी Google में सबसे ऊपर है, इसलिए iOS5 में छिपे रिमोटइंस्पेक्टर को लिंक करने के लायक है - अब तक आपके UIWebViews को डीबग करने का सबसे अच्छा तरीका - Apple को भेजने से पहले बस सशर्त संकलन करें।


3
अभी भी काम करता है, इसे इस तरह से उपयोग करें: [NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];जब आप रिलीज के लिए निर्माण करते हैं तो कॉल को हटाने के लिए याद रखें!
13

1
बहुत अच्छी तकनीक है। हालाँकि, ध्यान दें कि डीबगर केवल सफारी में काम करने लगता है। मैंने इसे अन्य ब्राउज़रों से आज़माया (उदाहरण के लिए क्रोम) और इसने कुछ नहीं दिखाया।
सागी मान

3
मैं पहले भी इसका इस्तेमाल करता था, लेकिन जाहिर तौर पर अब यह काम नहीं कर रहा है क्योंकि माउंटेन लायन ने (यहां संभावित संभावित बदलाव
Omer

9

सतर्क () निश्चित रूप से मेरे लिए काम करता है।

हालाँकि, आप बहुत सी अन्य चीजें भी कर सकते हैं, जैसे कि अपने खुद के DHTML को अलर्ट करें जो एक परत में पॉप अप करता है। यह अच्छा हो सकता है क्योंकि आप अपने ऐप को रोके बिना एक ही डिव के कई अलर्ट कर सकते हैं। आपको इसे स्टैक ट्रेस लिखने में भी सक्षम होना चाहिए (स्टैक ट्रेस अपवाद ऑब्जेक्ट में है, और आप हमेशा अपने स्वयं के अपवाद फेंक सकते हैं)।

वैकल्पिक रूप से, यदि सिम्युलेटर पर चल रहा है तो आपका कस्टम "अलर्ट ()" उद्देश्य C में कॉल कर सकता है, और iPhone सिम्युलेटर कंसोल कंसोल में स्ट्रिंग प्रदर्शित कर सकता है:

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   

और उद्देश्य सी तरफ:

//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView 
       shouldStartLoadWithRequest: (NSURLRequest*)req 
       navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[req URL] host] isEqualToString:@"debugger"]){
        // do stuff with [[req URL] path] 
       }
}

उस ने कहा, मेरे पास एक ऐप है जो UiWebView / javascript के सामान पर भारी है, और मैं Chrome में सबसे अधिक javascript dev करता हूं (अनुकरण करता हूं कि iPhone वातावरण से क्या आवश्यक है)


क्या मतलब है "अलर्ट ()" निश्चित रूप से मेरे लिए काम करता है? वस्तुनिष्ठ-सी में एक कॉल करना रचनात्मक है, मुझे आश्चर्य नहीं हुआ कि मैंने इसके बारे में पहले कभी नहीं सोचा था क्योंकि मैं इसे पहले से ही कर रहा हूं! धन्यवाद। :)
bpapa

हां, अलर्ट () ठीक काम करता है। शायद यह एक पुराने संस्करण पर नहीं था? लेकिन मैंने अभी इसकी कोशिश की, और एक पॉपअप प्राप्त किया जो लगभग उसी तरह दिखता है जैसा कि ओबीजर्ट व्यू के साथ किया गया था।
लूट

8

मुझे UIWebView या SFSafariViewController डीबग करने का भयानक तरीका मिलता है ।

मुझे उम्मीद है इससे मदद मिलेगी।

चरण 1: 
 अपने मैक में सफारी वीसी खोलें (हाहा अपना चेहरा मत बनाओ, अगर मैं आपकी मैकबुक में कह रहा हूं तो बस मेरे चरणों का पालन करें)



Step2: सफारी वरीयताओं पर जाएं और एडवांस पर क्लिक करें। आपको यह सेटिंग आपके मैकबुक स्क्रीन पर मिल जाएगी।

यहां छवि विवरण दर्ज करें

अब मेनू बार में मेनू विकसित करने के लिए शो सक्षम करें। अब आपका सारा काम पूरा हो गया है। क्या आप सोच रहे हैं मैं मज़ाक कर रहा हूँ: P: P no man ... 



Step3: अपना एप्लिकेशन डिवाइस या सिम्युलेटर में चलाएं। (डोंट थिंक जस्ट रन) और अपने एप्लिकेशन में जाएं जहां आप अपना वेबव्यू या SFSafariViewController खोल रहे हैं। अब तक तुम नहीं समझ पाए मैं जानता हूं। शांत रहो और मेरा अगला कदम देखो।

Step4: अपने मैकबुक में सफारी खोलें और मेनू बार से विकसित विकल्प पर क्लिक करें। क्या आपको अपना मैकबुक, iPad / iPhone कुछ मिल रहा है?

यहां छवि विवरण दर्ज करें



चरण 5: इसका काम किया। अपने डिवाइस पर क्लिक करें और URL पर क्लिक करें नया पॉपअप इस तरह बाहर आ जाएगा। यहां छवि विवरण दर्ज करें




Step6: क्या आप देख रहे हैं अब यहाँ अपने सभी चरणों में।

अब इस कंसोल पर अपना वेबपेज डीबग करें। खुश रहें और एक कप चाय या कॉफी के साथ कोडिंग करते हुए अपने दिन का आनंद लें।

छोटा सा भूत: नीचे देखें छवि को सक्षम करने के लिए मत भूलना यहां छवि विवरण दर्ज करें 









6

मैंने अभी तक यह कोशिश नहीं की है, लेकिन इस वेनरे पर एक नज़र डालें

बहुत होनहार लग रहा है।


weinre शांत है, लेकिन खबरदार है कि यह एक जेएस डिबगर के साथ नहीं आता है; यह सिर्फ एक "वेब इंस्पेक्टर है।" (जब तक मैं इसे अपने iPhone पर सेट करने में बहुत परेशानी नहीं हुई, तब तक मैंने इस पर ध्यान नहीं दिया।)
Dan Fabulich

लीन के बाद से वेनरे ने काम करना बंद कर दिया है: मुझे अब कनेक्शन नहीं मिल सकता है, संभवतः सैंडबॉक्सिंग के साथ एक मुद्दा।
rpitting

ऐसा लगता है कि Adobe का अभी Weinre के साथ एक सौदा है और Adobe छाया नामक एक ऐप प्रदान करता है जो इसे लागू करता है। बहुत अच्छा काम करता है।
एड्रियन हैरिस क्राउन

मैंने एनपीएम (नोड.जेएस पैकेज मैनेजर) के माध्यम से वेनरे को स्थापित किया और यह मेरे लिए माउंटेन लायन में काम कर रहा है। npm स्थापित -g weinre
wprl

2
लिंक-केवल उत्तर एक टिप्पणी के रूप में बेहतर अनुकूल हैं।
जॉरिस मेस

4

यह एक पुराना सवाल है। लेकिन मैं अभी भी अपने दो सेंट साझा करना चाहूंगा।

मैं दूरस्थ डीबगिंग के लिए jsconsole.com का उपयोग कर रहा हूं । यह आसान है। बस एक स्क्रिप्ट टैग शामिल करें और प्रिंटिंग द्वारा डीबग करने के लिए कंसोल लॉग का उपयोग करें। यह एक वास्तविक डिवाइस पर डिबगिंग के लिए भी इस्तेमाल किया जा सकता है।


3

पुराना सवाल है, लेकिन मुझे लगता है कि मुझे सबसे अच्छा समाधान मिला, मेरे मामले में आपको uiwebview को डीबग करने की आवश्यकता है, लेकिन मेरे पास आईओएस ऐप तक पहुंच ही नहीं थी और केवल html सामग्री थी और मुझे कुछ JS लॉग देखने थे, मैंने निम्नलिखित कोड जोड़ा प्रकाश फायरबग जेएस लोड करने के लिए और इसे स्वचालित रूप से दिखाएं:

इसे जेएस से बुलावा

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://getfirebug.com/firebug-lite-debug.js';
document.head.appendChild(script);

या इसे html से लोड करें

<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>

-1

आप जावास्क्रिप्ट की तरह उद्देश्य-सी से संदेश भेजने और वहां से लॉग इन करने के लिए फोनगैप में इस्तेमाल किया जाने वाला एक सिस्टम सेट कर सकते हैं । संक्षेप में, वे एक कस्टम स्कीम के साथ डॉक्यूमेंट सेट कर रहे हैं और प्रतिनिधि कॉलबैक में उस स्कीम को ब्लॉक कर रहे हैं।

आप इस तथ्य का लाभ उठा सकते हैं कि एक UIWebView एक WebView के लिए सबसे अधिक प्रतिनिधि है। WebKit तकनीकी रूप से iPhone के लिए अनिर्दिष्ट है, लेकिन अधिकतर डेस्कटॉप WebKit हेडर में निर्दिष्ट है, संभवतः WebScriptObject सहित। मैं डिबगिंग के लिए इसका उपयोग करता हूं, लेकिन Apple को सबमिट करने से पहले इस कोड को निकालना सुनिश्चित करें।

UIWebView से WebView प्राप्त करने के लिए, UIWebView के -(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrameउपवर्ग में एक प्रतिनिधि विधि लागू करें । सुपर को बुलाओ अगर तुम उस एक का उपयोग करते हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.