我需要在我的kivy应用程序中嵌入一个webview,或者使用其他支持android和IOS的python应用程序框架。我也希望保存用于登录的cookie,这样用户就不必登录不止一次。这是可能的,还是我应该寻找另一种方法来实现这一点?谢谢您的回复!
发布于 2021-03-31 00:55:32
不幸的是,没有“通用”方法来做到这一点。然而,这仍然是可能的。不幸的是,也没有一种“原生”方法。
安卓:
对于android,您可以使用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()
此外,您还可以使用吉纽斯访问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)
另一种解决方案是使用比奥布朱访问Objective类,这通常会在iOS上实现webview。我不想粘贴未经测试的代码,所以我建议您查看这个谷歌集团底部的Michael和Julez的答案。
https://stackoverflow.com/questions/66847097
复制相似问题