omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    [share code] WebViewDataReceiver

    Pythonista
    2
    2
    2245
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • cook
      cook last edited by

      Just want to share a way to get data from a webview to your script without using a server. Not sure if this is useful for anyone. I'm sure you can do anything... form data etc. I had the idea when I was thinking about a project and thought this should be possible.

      I had asked about this somewhere before and it seemed like running a server is the answer but it seems like much more stuff to do. This could be a simpler way.

      Thanks omz for your help with the activity indicator objc!

      # coding: utf-8
      
      import ui
      import urllib
      from objc_util import *
      
      #a way to 'cheat' and get data from a webview to the script without using a server. 
      #uses javascript and the webview delegate to deliver data back to the script (kind of like an urlscheme for your script)
      #
      #this is just a quick sample to show the possibility
      
      class WebViewDataReceiver (ui.View):
      	def __init__(self, html, flex='WH'):
      		self.w = ui.WebView(flex='WH')
      		self.w.delegate = self
      		self.w.scales_page_to_fit = False
      		self.w.load_html(html)
      		self.add_subview(self.w)
      		self.present()
      		
      	def webview_should_start_load(self, webview, url, nav_type):
      		#need to filter the url; better to use a kind of urlscheme. 
      		#recommend starting with something like myscript://
      		if url.startswith('myscript://'):
      			self.name = urllib.unquote(url.split('myscript://')[1])
      			
      			#stop the activity indicator; necessary
      			UIApplication.sharedApplication().setNetworkActivityIndicatorVisible_(False) 
      			return False
      		else:
      			return True
      			
      if __name__ == '__main__':
      	html = '''<a onclick="location.href='myscript://Ha! Click-bait!'">Click here</a>'''
      	
      	WebViewDataReceiver(html)
      
      
      1 Reply Last reply Reply Quote 1
      • JonB
        JonB last edited by

        If you are doing anything in javascript, i recommend using something like this, to install a useful console logging, and error logging.

        https://forum.omz-software.com/topic/1804/debugging-in-javascript-in-pythonista

        1 Reply Last reply Reply Quote 1
        • First post
          Last post
        Powered by NodeBB Forums | Contributors