Python 应用程序框架在应用程序内部创建 webview

标签 python ios webview uiwebview kivy

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

最佳答案

不幸的是,没有“通用”的方法来做到这一点。然而,它应该仍然是可能的。不幸的是,也没有 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访问 Objective-C 类,通常会在 iOS 上实现 webview。我不想粘贴未经测试的代码,所以我建议您查看 this google group 底部的 Michael Galaxy 和 Julez 的回答。 .

关于Python 应用程序框架在应用程序内部创建 webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66847097/

相关文章:

python - 矫正倾斜的矩形图片和菱形形状

ios - 找不到 'WCSessionDelegate' 的协议(protocol)声明

android - 当我在 webview 中点击一个链接时,为什么它没有在 chrome 上打开一个新标签?

python - 在 python 中使用 selenium send_keys 复制文本

c# - 如何修复Python float 指数结果

python - 为什么我重新实现的 QCheckBox.hitButton 只适用于检查指示器的一小部分区域?

ios - 更改框架时 UITextView 光标位于框架下方

ios - 为什么在延迟调用时循环迭代有时会被打乱? [代码和输出]

android - 如何为 react 原生的 android WebView 设置允许文件访问?

android - 如何将 Android Oreo(8.0) 自动填充框架应用到 WebView?