2013-10-15 7 views
5

मैं अपने एंड्रॉइड ऐप में jQueryMobile का उपयोग करके बनाए गए एक पेज में प्रस्तुत करने की कोशिश कर रहा हूं, लेकिन मुझे इसे ऑफ़लाइन स्थिति में वेबव्यू में करने की ज़रूरत है।jQuery मोबाइल स्थानीय संपत्तियों से लोड होने पर वेबव्यू में काम नहीं कर रहा है

उस उद्देश्य के लिए, मैंने अपने पृष्ठ के index.html की प्रतिलिपि बनाना शुरू कर दिया और सभी आवश्यक संपत्तियों को सीधे अपने डिवाइस के आंतरिक संग्रहण में ले जाना शुरू कर दिया। इसके बाद मैंने अपने डिवाइस और क्रोम ऐप के आंतरिक ब्राउज़र दोनों में file:///sdcard/index.html टाइपिंग को लोड किया, और वेबसाइट ने jQuery शैलियों और सभी के साथ बस ठीक दिखाया।

फिर मैं अपने ऐप में जाता हूं, जहां मेरे पास वेबव्यू है, और यही वह जगह है जहां मुझे वास्तव में उपर्युक्त पृष्ठ प्रस्तुत करने की आवश्यकता है।

loadDataWithBaseURL("file:///android_asset/web/", html, "text/html", "UTF-8", null); 

मैं अपने संपत्ति फ़ोल्डर की वेब निर्देशिका में मेरे सभी परिसंपत्तियों का ध्यान रखें: मैं इस तरह loadDataWithBaseURL() का उपयोग कर (क्योंकि मैं अंत में क्या करने की जरूरत है कि) पृष्ठ लोड।

समस्या यह है कि, यदि मैं संपत्ति संदर्भ के बिना पृष्ठ लोड करता हूं (केवल सामान्यतः loadUrl पर कॉल करता है) यह लोड करता है लेकिन जाहिर है स्टाइल या कार्यक्षमता के बिना। जब मैं loadDataWithBaseURL पर संपत्ति संदर्भ संदर्भ डालता हूं तो यह वास्तव में संपत्ति संदर्भ को सही ढंग से पढ़ रहा है लेकिन प्रतिपादन jqueryMobile के कताई चक्र के साथ फंस गया है और पृष्ठ वास्तव में कभी लोड नहीं होता है।

enter image description here

तो यह योग करने के लिए:: यह मैं क्या देख रहा है

  • मैं jQuery मोबाइल का उपयोग कर एक वेबसाइट बनाई है। यह jQuery की स्टाइल के साथ बस एक साधारण HTML पृष्ठ है।

  • मैंने इसे ऑफ़लाइन लोडिंग के लिए तैयार किया है। मैंने आवश्यक संपत्ति को फ़ोल्डर में और index.html में पैक किया है, मैं इन संपत्तियों को अपेक्षाकृत संदर्भित करता हूं (उदा। href="web/styles.css")।

  • अगर मैं अपने डेस्कटॉप ब्राउज़र में इस पृष्ठ को लोड, कनेक्टिविटी के बिना, यह काम करता है

  • अगर मैं अपने मोबाइल ब्राउज़र (जैसे Chrome या आंतरिक
    एक) में इस पृष्ठ को लोड, यह काम करता है।

  • अगर मैं बिना मेरे वेबव्यू में संपत्ति संदर्भों यह पेज लोड, यह काम करता है

  • (स्टाइल या छवियों, आदि) के बिना अगर मैं संपत्ति संदर्भ में इस पेज लोड मेरे वेबव्यू में, यह
    काम नहीं करता है, यह कताई चक्र से फंस गया है। कनेक्टिविटी इस मुद्दे को प्रभावित नहीं करती है।

  • अपने स्टाइल के बिना लोड अगर मैं लाइन का संदर्भ देता है jQM स्टाइलशीट निकालें, तब पेज है, लेकिन छवियों को ठीक से लोड किए गए हैं

(ताकि संपत्ति को संदर्भ सही है)

ध्यान दें कि चरखा के बाद से मैं jQM में पूरी तरह से विकलांग AJAX का उपयोग नहीं भी पहले स्थान पर प्रदर्शित किया जाना चाहिए:

<script> 
$.mobile.ajaxEnabled = false; 
</script> 

अजीब पतली जी यह है कि एएफएआईके आंतरिक एंड्रॉइड वेब ब्राउज़र और वेबव्यूज़ एक ही रेंडरर साझा करते हैं, इसलिए मैं यहां क्या हो रहा था, इस बारे में खो गया हूं, और चूंकि यह नियमित ब्राउज़रों के साथ ठीक काम करता है, इसलिए मैं क्या हो रहा है डीबग कर सकता हूं।

के लिए, इस मैं अपने WebView कैसे परिभाषित है:

mWebView = (WebView) findViewById(R.id.webView); 
    WebSettings s = mWebView.getSettings(); 
    s.setJavaScriptEnabled(true); 

मैं अन्य सेटिंग्स का एक समूह था, लेकिन समस्या मैं उन्हें हटा दिया और समस्या बनी रहती है को सरल बनाने के लिए।

कोई सुझाव?

पीडी। अनुरोध के रूप में, index.html फ़ाइल पोस्टिंग। यह सबसे सरल उदाहरण है, बस एक खाली सूचकांक। समस्या बनी रहती है:

<!doctype html> 
<html lang=es> 
<head> 
<meta charset="utf-8"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta name="apple-touch-fullscreen" content="yes"> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 
<meta name="format-detection" content="telephone=no" /> 
<meta name="HandheldFriendly" content="true" /> 
<meta name="MobileOptimized" content="320" /> 
<head> 
<title> 
    My title 
</title> 

<script> 
$.mobile.ajaxEnabled = false; 
</script> 

<script src="script/jquery/jquery-1.9.1.min.js"></script> 
<script src="script/jquery/jquery.mobile-1.3.2.min.js"></script> 
<link href="css/jquery.mobile-1.3.2.min.css" rel="stylesheet" media="screen" type="text/css" /> 


</head> 

<body> 

</body> 
</html> 
+0

कृपया इंडेक्स का कोड दिखाएं।एचटीएमएल –

+0

ने अभी भी एक कम संस्करण पोस्ट किया है, जहां समस्या अभी भी मौजूद है –

+0

मुझे पता चला कि जेक्यूएम सीएसएस लाइन पर टिप्पणी करने से पृष्ठ लोड होता है (लेकिन स्टाइल के बिना, जाहिर है), तो ऐसा लगता है कि यह एक सीएसएस संबंधित समस्या है –

उत्तर

28

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

प्री-जेली डिवाइस से मेरा ऐप चलाना ठीक काम करता है, लेकिन विकास के लिए उपयोग किए जा रहे दो डिवाइस 4.3 आधारित थे।

मैं निम्नलिखित कोड का उपयोग कर इसे हल, अगर कोई रुचि रखता है:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){ 
     s.setAllowUniversalAccessFromFileURLs(true); 
     s.setAllowFileAccessFromFileURLs(true); 
    } 
+0

मैं ' जेलीबीन पर चलाने के लिए एपीआई 12 का उपयोग करके इसे ढूंढें ... आप इस जेली एपीआई का उपयोग कर प्री-जेली पर कैसे काम करते हैं? धन्यवाद। –

+1

मेरे मामले में: http://stackoverflow.com/questions/8390985/android-4-0-1-breaks-webview-html-5-local- स्टोरेज –

+0

यह पूरी तरह से काम करता है। मैं केवल s.setAllowUniversalAccessFromFileURLs (सत्य) था, और यह एंड्रॉइड 5.1 तक काम करता है। मैं पागल हो रहा था। यह s.setAllowFileAccessFromFileURLs (सत्य) ने मेरे लाइव को बचाया! धन्यवाद – VictorPurMar

0

बचें WebView.pauseTimers() का उपयोग कर।

या WebView.resumeTimers() को आजमाएं जब गतिविधि में वेबव्यू onResume() शामिल है।

+0

धन्यवाद लेकिन समस्या एक अलग थी –

0

गेब्रियल सनमार्टिन के लिए एक बड़ा धन्यवाद। मैं एक ऐसी ही स्थिति थी, लेकिन मैं नियमित रूप से jQuery, मोबाइल नहीं प्रयोग कर रहा था, और एक div में एक स्थानीय आंशिक html फ़ाइल लोड करने के लिए .load() फ़ंक्शन को कॉल, इसलिए जैसे:

var divNew = document.createElement('div'); 
var $divNew = $(divNew); 
var sFilePath = sSubfolder + '/' + 'Index.html'; 
$divNew.load(sFilePath, function (response, status, xhr) { 
    if (status == "error") { 

    } 
}); 

मैं बिताया लगभग आधी & के माध्यम से जा रहा दिन जेएस कोड डीबगिंग जब तक मैं इस धागे पर आया था। उन दो सेटिंग्स को ढूँढना शानदार था। यह सब अंतर बना दिया। मेरे सी # कोड के नीचे है:

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBean) 
{ 
     wbView.Settings.AllowUniversalAccessFromFileURLs = true; 
     wbView.Settings.AllowFileAccessFromFileURLs = true; 
} 

जानकारी के लिए: Android.OS.BuildVersionCodes.JellyBean रूप Android.OS.Build.VERSION_CODES.JellyBean अप्रचलित है और भविष्य के संस्करणों में निकाल दिया जाएगा सिफारिश की थी।

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