【问题标题】:Python app framework create webview inside of appPython应用程序框架在应用程序内创建webview
【发布时间】:2021-06-25 01:30:03
【问题描述】:

我需要在我的 kivy 应用程序中嵌入一个 webview,或者使用其他一些支持 android 和 IOS 的 python 应用程序框架。我还希望保存用于登录的 cookie,这样用户就不必多次登录。这是可能的还是我应该寻找另一种方法来实现这一点?感谢您提前回复!

【问题讨论】:

    标签: python ios webview uiwebview kivy


    【解决方案1】:

    不幸的是,没有“通用”方法可以做到这一点。然而,它应该仍然是可能的。不幸的是,也没有 kivy 的“原生”方法。

    安卓:

    对于安卓你可以使用webview-android:

    from kivy.uix.widget import Widget
    from kivymd.app import MDApp
    from webview import WebView
    from kivy.lang.builder import Builder
    from kivymd.uix.button import MDFlatButton
    from kivymd.uix.screen import MDScreen
    
    Builder.load_string("""
    <MyWebView>
        MDFlatButton:
            text: "Push"
            pos_hint: {"center_x": .5, "center_y": .4}
            on_press: root.Push()
    """)
    
    class MyWebView(MDScreen):
        def Push(self):
            WebView("https://www.google.com")
    
    
    class MyWebApp(MDApp):
        def build(self):
            return MyWebView()
    
    
    if __name__ == '__main__':
        MyWebApp().run()
    

    此外,您可以使用jnius 访问 java 类,这通常会这样做:

    import kivy                                                                                     
    from kivy.app import App                                                                        
    from kivy.lang import Builder                                                                   
    from kivy.utils import platform                                                                 
    from kivy.uix.widget import Widget                                                              
    from kivy.clock import Clock                                                                    
    from jnius import autoclass                                                                     
    from android.runnable import run_on_ui_thread                                                   
                                                                                                    
    WebView = autoclass('android.webkit.WebView')                                                   
    WebViewClient = autoclass('android.webkit.WebViewClient')                                       
    activity = autoclass('org.kivy.android.PythonActivity').mActivity                              
                                                                                                    
    class Wv(Widget):                                                                               
        def __init__(self, **kwargs):                                                               
            super(Wv, self).__init__(**kwargs)                                                      
            Clock.schedule_once(self.create_webview, 0)                                             
                                                                                                    
        @run_on_ui_thread                                                                           
        def create_webview(self, *args):                                                            
            webview = WebView(activity)                                                             
            webview.getSettings().setJavaScriptEnabled(True)                                        
            wvc = WebViewClient();                                                                  
            webview.setWebViewClient(wvc);                                                          
            activity.setContentView(webview)                                                        
            webview.loadUrl('http://www.google.com')
                                                                                                    
    class ServiceApp(App):                                                                          
        def build(self):                                                                            
            return Wv()                                                                             
                                                                                                    
    if __name__ == '__main__':                                                                      
        ServiceApp().run()
    

    iOS

    很遗憾,我没有 iOS 设备,所以我无法测试这些。

    kivy-ios 模块似乎包含实现此目的的方法:

    import ios
    url = "http://www.google.com"
    ios.IOSWebView().open(url, width, height)
    

    另一种解决方案是使用pyobjus 来访问通常会在iOS 上实现webview 的Objective-C 类。我不想粘贴未经测试的代码,所以建议您查看 this google group 底部的 Michael Galaxy 和 Julez 的答案。

    【讨论】:

    • 感谢您的回答!似乎 kivy-ios 只支持 mac,我正在使用 windows 机器进行开发。 Pyobjus 给了我安装问题并且无法正常工作。
    • 我明白了...请注意,这两个版本都不能在您的桌面上运行。 android 版本需要存在 java 类。这显然不是你的 Windows 机器上的情况。然而,根据this reddit 帖子,kivy-ios 版本应该可以在 iOS 设备上运行。
    • @NameKhan72 您能否建议使用 kivymd 的桌面应用程序的 webview?
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2011-03-23
    • 2011-10-29
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多