2009-10-29 15 views
8

के लिए ब्राउजर का उपयोग करना डेस्कटॉप ब्राउज़र के लिए यूआई के रूप में ब्राउज़र का उपयोग कैसे कर सकता हूं? जिन तरीकों से मैं अब तक आया हूं वे हैं ...डेस्कटॉप यूआई

  1. सभी HTML/जावास्क्रिप्ट का उपयोग करें। समस्या: फाइल सिस्टम या बस कुछ भी नहीं पहुंच सकता है।
  2. एप्लिकेशन उपयोग में होने पर स्थानीय वेबसर्वर चलाएं। समस्या: उपयोगकर्ता द्वारा किए जाने पर मैं इसे कैसे मारूं? मेरे उपयोगकर्ता Ctrl + C के लिए पर्याप्त तकनीकी नहीं हैं।
  3. एक नियमित जीयूआई में एक ब्राउज़र घटक एम्बेड करें। समस्या: एम्बेडेड ब्राउज़र घटक सबसे अच्छा गड़बड़ कर रहे हैं। जावास्क्रिप्ट/सीएसएस के लिए समर्थन उतना अच्छा नहीं है जितना कि यह वास्तविक ब्राउज़र में है।
  4. ...?

आदर्श समाधान किसी भी तकनीक के साथ काम करेगा। मुझे पता है कि फ़ायरफ़ॉक्स एक्सटेंशन लिखने जैसे विकल्प हैं, लेकिन मैं बैकएंड तकनीक और ब्राउज़र आजादी में पूर्ण स्वतंत्रता प्राप्त करना चाहता हूं।

+1

दिलचस्प आपको पूछना चाहिए: मैं HTTP के माध्यम से उपलब्ध "डेस्कटॉप एप्लिकेशन" खोजने के लिए एक एनपीएपीआई प्लगइन (फ़ायरफ़ॉक्स, क्रोम) तैयार कर रहा हूं। यह Avahi mdns सेवा डिस्कवरी पर आधारित है। – jldupont

+1

मैंने इस लक्ष्य की दिशा में मदद के लिए क्रोमियम पर कुछ "बग" भी खोले हैं। – jldupont

उत्तर

2

विंडोज़ में, आप IE ActiveX नियंत्रण को एम्बेड कर सकते हैं, जो IE के समान प्रस्तुतीकरण इंजन का उपयोग करता है। (यह एक प्लस और एक ऋण है) आप अपने होस्ट कोड में ScriptObject प्रॉपर्टी सेट कर सकते हैं और जावास्क्रिप्ट में window.external के रूप में जावास्क्रिप्ट में ऐसा करने के लिए एक्सेस कर सकते हैं जो जावास्क्रिप्ट नहीं कर सकता है।

यदि आप स्थानीय वेबसर्वर चलाते हैं, तो आपके पास वेबसेवर को मारने वाले ऐप में एक एक्जिट लिंक हो सकता है।

+0

मुझे यह पता लगाने में परेशानी हो रही है कि हत्या लिंक कैसे लिखना है। मैं एक समाधान के साथ आया हूँ, लेकिन यह बहुत हैकी है। जिन सर्वरों का मैं प्रयास कर रहा हूं वे सभी पाइथन हैं, लेकिन किसी भी प्रकार का ठोस उदाहरण शांत होगा। –

+0

और निश्चित रूप से समस्या है कि उपयोगकर्ता हत्या लिंक पर क्लिक नहीं कर सकता है। –

+0

यदि आप WebBrowser नियंत्रण होस्ट करते हैं, तो होस्ट ऐप से बाहर निकलने पर आप सर्वर को मार सकते हैं।अन्यथा, आप आखिरी अनुरोध के बाद कुछ समय सर्वर को मार सकते हैं, और यदि उपयोगकर्ता इसे थोड़ी देर के लिए अकेले छोड़ देता है तो अपने पृष्ठों में दिल की धड़कन भेज सकता है। या, आप इसे चलाना छोड़ सकते हैं। – SLaks

1

आपने ओएस का उल्लेख नहीं किया है जिसे आपको लक्षित करने की आवश्यकता होगी। लेकिन आप एक प्रोग्राम स्टेटर्ड वेब सर्वर बनाने में सक्षम हो सकते हैं, फिर डिफ़ॉल्ट ब्राउज़र लॉन्च किया। तब तक प्रतीक्षा करें जब तक कि उपयोगकर्ता को उपयोगकर्ता द्वारा समाप्त नहीं किया जाता है और फिर वेब सर्वर को बंद कर दें।

तो उदाहरण के लिए विंडोज़ पर आप प्रक्रिया को आगे बढ़ाने के लिए CreateProcess() का उपयोग कर सकते हैं, तो MsgWaitForMultipleObjects() निष्पादित होने तक प्रतीक्षा करने के लिए।

+0

ओएस आजादी भी शानदार होगी, लेकिन विंडोज़ मैं काम कर रहा हूं। ऐसा लगता है कि यह काम कर सकता है। उपयोगकर्ता अभी भी ब्राउज़र को खोल सकता है और अन्य साइटों को ब्राउज़ करने के लिए इसका उपयोग कर सकता है, लेकिन कम से कम मुझे पता है * आखिरकार * यह बंद हो जाएगा। कोई समस्या हो सकती है हालांकि ब्राउज़र नए ऐप के बजाय ऐप को नए टैब में खोलने का फैसला करता है। मुझे लगता है कि कमांड लाइन से बुलाए जाने पर भी फ़ायरफ़ॉक्स ऐसा करता है। –

+2

यदि आप ब्राउज़र को बंद करने की प्रतीक्षा करते हैं, तो आप प्रतीक्षा करना बंद नहीं करेंगे। याद रखें कि सभी आधुनिक ब्राउज़र टैब का समर्थन करते हैं, ताकि कई लोग स्वयं शामिल हों, ब्राउज़र को 24/7 चलाएं। – SLaks

+1

इसके अलावा, यदि ब्राउज़र पहले से चल रहा है, तो आपको प्रतीक्षा करने के लिए एक नई प्रक्रिया भी नहीं मिलेगी। – SLaks

8

कृपया ध्यान दें कि यदि आप स्थानीय वेबसर्वर चलाने का विकल्प चुनते हैं, तो आप एक सुरक्षा जोखिम बना रहे हैं।

आपके ऐप के बारे में जो भी मशीन जानता है उसी मशीन पर चल रहा कोई भी वेबपृष्ठ जावास्क्रिप्ट का उपयोग करके आपके सर्वर को अनुरोध भेज सकता है, और आपके पास यह जानने का कोई आसान और विश्वसनीय तरीका नहीं है कि अनुरोध क्या हुआ। (referer शीर्ष पर भरोसा न करें)

Google डेस्कटॉप, जो समान दृष्टिकोण का उपयोग करता है, में कई वास्तविक दुनिया की भेद्यताएं हैं जो किसी भी वेबपृष्ठ को डिस्क पर किसी भी फ़ाइल को पढ़ने की अनुमति देती हैं।

इसके खिलाफ सुरक्षा के कई तरीके हैं; मैं अनुशंसा करता हूं कि प्रत्येक अनुरोध को एक एथ कुंजी प्राप्त करने की आवश्यकता होगी जो यादृच्छिक रूप से जेनरेट की गई प्रति मशीन (और किसी बिंदु पर समाप्त हो जाती है), जिसे आप वास्तविक पृष्ठों के स्रोत में डाल सकते हैं। एक्सएचआर सुरक्षा दुर्भावनापूर्ण वेबसाइटों को ऑथ कुंजी पढ़ने से रोकती है, जिससे उन्हें शक्तिहीन प्रदान किया जाता है।

+1

स्थानीय सर्वर को उसी मशीन से केवल अनुरोध स्वीकार करने के लिए सेट नहीं किया जा सकता है? –

+0

हां; मेरा मतलब था कि एक ही ग्राहक पर जावास्क्रिप्ट ऐसे अनुरोध भेज सकता है। – SLaks

+1

दिलचस्प .... –

1

एचटीएमएल एप्लीकेशन (एचटीए, संक्षेप में) थोड़ी देर के लिए आसपास रहे हैं। आप उनके बारे में सभी here पढ़ सकते हैं। वे मूल रूप से एचटीएमएल और जावास्क्रिप्ट हैं जो खिड़की बनाने और स्थानीय फाइल सिस्टम तक पहुंच के साथ कुछ अतिरिक्त विकल्पों के साथ हैं। वे बिल्कुल वही दिखते हैं जो आप चाहते हैं। यह माइक्रोसॉफ्ट तकनीक है, इसलिए यह केवल विंडोज सिस्टम पर आईई के साथ काम करेगा। मैंने सफलतापूर्वक इसे सीडी-रोम के लिए फ्रंट-एंड के रूप में उपयोग किया है जिसका उपयोग पहली वर्ष के छात्रों को सॉफ्टवेयर वितरित करने के लिए किया गया था

एक और विकल्प एडोब एयर का उपयोग करना होगा। मैं तकनीक से परिचित नहीं हूं, लेकिन ऐसा लगता है कि वेब पृष्ठों को डेस्कटॉप अनुप्रयोगों के रूप में तैनात करने के लिए एक ढांचा प्रदान करना है।मैं अतिथि के रूप में दूसरा लिंक पोस्ट नहीं कर सकता, लेकिन बस इसे Google पर क्लिक करें और आपको जल्द ही यह मिल जाएगा।

+0

असल में, यह वही है जो मैं नहीं चाहता, क्योंकि "मैं बैकएंड प्रौद्योगिकी और ब्राउज़र आजादी में पूर्ण स्वतंत्रता प्राप्त करना चाहता हूं।" –

4

यदि आप एक किल लिंक के साथ एक अजगर वेब सर्वर की तलाश में हैं, तो आप हमेशा चेरीपी की जांच कर सकते हैं। एक सामान्य WebApp आप शायद मुख्य जैसे तरीकों से एक templating इंजन और लोड टेम्पलेट्स का प्रयोग करेंगे की तुलना में http://tools.cherrypy.org/wiki/SingleClickAndRun

नोट:

import webbrowser 
import cherrypy 
import threading 

class MyApp: 
    """ Sample request handler class. """ 

    @cherrypy.expose 
    def index(self): 
     return """<html><head><title>An example application</title></head> 
<body> 
<h1>This is my sample application</h1> 
Put the content here... 
<hr> 
<a href="/exit">Quit</a> 
</body></html>""" 

    @cherrypy.expose 
    def exit(self): 
     raise SystemExit(0) 


class MyBGThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.start() 

    def run(self): 
     cherrypy.tree.mount(MyApp()) 
     cherrypy.quickstart() 

myThread = MyBGThread() 
webbrowser.open("http://127.0.0.1:8080") 

इस कोड SingleClickAndRun से नमूना cherrypy वेबसाइट पर पर आधारित है।

कुछ अच्छा होगा जो एक गुई विंडो में ब्राउज़र नियंत्रण को जोड़ना होगा और ऐप से बाहर निकलने पर सर्वर बंद करना होगा।

सुरक्षा के लिए, आप संभवतः एक प्रमाणीकरण योजना जोड़ सकते हैं। कुछ ऐसे हैं जो चेरीपी द्वारा समर्थित हैं, लेकिन संभवतः आप टूल मॉड्यूल का उपयोग करके भी अपना खुद का कार्यान्वयन कर सकते हैं।

+0

यह वह चीज है जिसे मैं ढूंढ रहा हूं। धन्यवाद। –

4

मैं बिल्कुल वही काम करना चाहता हूं (डेस्कटॉप ऐप जो डेस्कटॉप ऐप के जीयूआई के रूप में अद्यतित HTML5/CSS3 ब्राउज़र का उपयोग करता है), केवल रूबी के साथ (विभिन्न कारणों से मैंने रूबी के साथ काम करने का फैसला किया)। यह आश्चर्यजनक है कि क्रॉस प्लेटफार्म पुस्तकालयों की संख्या आ गई है। लेकिन फिर भी, किसी के लिए कुछ भी नहीं, वेब ब्राउज़र को डेस्कटॉप ऐप यूआई बनाने की कोशिश करने पर कोई काम किया है। क्रॉस प्लेटफार्म मुद्दा ... अच्छी तरह से मैं हल नहीं कहूंगा, लेकिन मैं सही दिशा में कई कदम कहूंगा।

मेरे लिए यह नए HTML5/CSS3 मानकों के साथ सही होगा। मुझे पता है कि इसे स्थानीय रूप से चल रहे वेब सर्वर के साथ किया जा सकता है।

एक और तरीका यह हो सकता है कि "280 उत्तर" के लोग क्या कर रहे हैं। उन्होंने उद्देश्य-जे विकसित किया (नियमित जावास्क्रिप्ट का एक विस्तार जो नकल करता है कि उद्देश्य-सी कैसे नियमित सी बढ़ाता है) और कैप्चिनो (उद्देश्य-जे मैक पर उद्देश्य-सी के कोको फ्रेम कार्य के समकक्ष)। उन्होंने "एटलस" भी विकसित किया जो एक्सकोड से ऐप्पल के "इंटरफेस बिल्डर" के 280 नॉर्थ का संस्करण है, उनके उद्देश्य-जे और कैप्चिनो फ्रेमवर्क इंटरनेट अनुप्रयोगों के निर्माण के लिए। एटलस वास्तव में एक डेस्कटॉप ऐप के रूप में आपके डेस्कटॉप पर चल रहा एक कैप्चिनो वेब ऐप है। इस मामले में वे ब्राउज़र के बाहर जेएस ऐप्स विकसित करने के लिए नारवाह ... एक क्रॉस प्लेटफ़ॉर्म, सामान्य उद्देश्य, जावास्क्रिप्ट प्लेटफ़ॉर्म का उपयोग करते हैं (मूल रूप से एक विशेष वेब सर्वर)।

यदि कोई भी वेब ब्राउज़र सह-मौजूदा की आवश्यकता के बिना "ब्राउजर, डेस्कटॉप ऐप से सीधे कनेक्ट" काम करने के विचार के साथ आ सकता है और फिर भी स्थानीय एफएस में हेरफेर करने के लिए मिलता है, तो मुझे बहुत दिलचस्पी होगी ... हमम ... अब जब मैं इसके बारे में सोचता हूं, तो मुझे आश्चर्य है कि क्या नया Google क्रोम प्रोजेक्ट "मूल क्लाइंट" का उपयोग करने के लिए किया जा सकता है। NaCL सक्रिय एक्स की तरह है, सिवाय इसके कि आप विंडोज प्लेटफ़ॉर्म तक सीमित नहीं हैं (लेकिन कम से कम अब तक Google क्रोम ब्राउज़र तक ही सीमित होंगे)। केवल सैंडबॉक्सिंग के माध्यम से सुरक्षा जोड़ा गया है, लेकिन आप स्थानीय एफएस में हेरफेर कर सकते हैं ... जितना अधिक मैं इसके बारे में सोचता हूं, उतना ही मुझे संदेह होना शुरू हो जाता है कि यह किया जा सकता है।

कोई विचार?

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