CustomWebView : An extended form of Web Viewer

1.Introduction

CustomWebView is an extended form of web viewer with more customization and flexibility (For MIT AI2 and its distros)

Latest Version : 10.1
Required Api : 21
Permissions: android.permission.WRITE_EXTERNAL_STORAGE,android.permission.ACCESS_DOWNLOAD_MANAGER,android.permission.ACCESS_FINE_LOCATION,android.permission.RECORD_AUDIO, android.permission.MODIFY_AUDIO_SETTINGS, android.permission.CAMERA,android.permission.VIBRATE,android.webkit.resource.VIDEO_CAPTURE,android.webkit.resource.AUDIO_CAPTURE,android.launcher.permission.INSTALL_SHORTCUT

2.Features

  • More customization options than normal web viewer
  • Long Click event
  • New window request event
  • Close window request event
  • Load local files and content using Html and Js
  • Find words and phrases in webview
  • Evaluate Js and get result
  • Upload files to websites
  • Error occurred event
  • Get output from console
  • Form Resubmission event
  • Get content height
  • Get SSL Certificate of website
  • Get/Set cookies for particular url
  • Event for permission(s) request and grant permission(s) manually
  • Print web content
  • A wide range of tools for working with JavaScript
  • Accepts external links/Adds your app in browsers list when you use CustomWebViewHelper extension
  • Download files using built-in download method
  • Scroll Changed event and function to scroll to particular position
  • Create and Remove webviews dynamically
  • Ad blocker
  • Full screen video feature (OnShowCustomView and OnHideCustomView)
  • Pause and Resume webview
  • Get internal history
  • Download offline pages and load them without internet connection
  •  

3.Designer Properties


4.Blocks

Events

image

image

image

image

image

image

 

Methods/Functions

image

image

image

image

image

image

image

image

Properties

  image

image

image

image

image

image

5.Documentation

Events

  • AfterArchiveSaved
    Event raised after ‘SaveArchive’ method.If ‘success’ is true then returns file path else empty string.
    image
    success ~ boolean
    filePath ~ text
  • AfterJavaScriptEvaluated
    Event raised after evaluating Js with result
    component_event
    result ~ text
  • Cookies Removed
    Event raised after ‘ClearCokies’ method with result
    component_event (1)
    successful ~ boolean
  • File Upload Needed
    Event raised when file uploading is needed
    component_event (19)
    mimeType ~ text
    isCaptureEnabled ~ boolean
  • Find Result Received
    Event raised after ‘Find’ method with int ‘activeMatchOrdinal’,‘numberOfMatches’ and ‘isDoneCounting’
    component_event (2)
    activeMatchOrdinal ~ int
    numberOfMatches ~ int
    isDoneCounting ~ boolean
  • Got Ssl Certificate
    Event raised after getting SSL certificate of current displayed url/website with boolean ‘isSecure’ and Strings ‘issuedBy’,‘issuedTo’ and ‘validTill’.If ‘isSecure’ is false and other values are empty then assume that website is not secure
    component_event (3)
    isSecure ~ boolean
    issuedBy ~ text
    issuedTo ~ text
    validTill ~ text
  • Got Print Result
    Event raised after getting previus print’s result
    component_event (4)
    id ~ text
    isCompleted ~ boolean
    isFailed ~ boolean
    isBlocked ~ boolean
  • Long Clicked
    Event raised when something is long clicked in webview with item(image,string,empty,etc) and type(item type like 0,1,8,etc).Note: ‘SecondaryUrl’ is returned when long clicked item has both image and url.In that case ‘item’ returns the image url while ‘secondaryUrl’ returns the source url.
    component_event (17)
    item ~ text
    secondaryUrl ~ text
    type – int

Learn more: WebView.HitTestResult 10

  • On Console Message
    Event raised after getting console message
    component_event (6)
    message ~ text
    lineNumber ~ int
    sourceID ~ int
    level ~ text
  • On Download Needed
    Event raised when downloading is needed
    component_event (7)
    url ~ text
    contentDisposition ~ text
    mimeType ~ text
    size ~ int (long)
  • On Error Received
    Event raised when any error is received during loading url and returns message,error code and failing url
    component_event (8)
    message ~ text
    errorCode ~ int
    url ~ text
  • On Form Resubmission
    Event raised when resubmission of form is needed
    component_event (9)
  • On Hide Custom View
    Event raised when current page exits from full screen mode
    component_event (21)
  • On Js Alert
    Event raised when Js have to show an alert to user with message to be shown
    component_event (15)
    url ~ text
    message ~ text
  • On Js Confirm
    Tells to display a confirm dialog to the user
    component_event (16)
    url ~ text
    message ~ text
  • On Js Prompt
    Event raised when JavaScript needs input from user
    component_event (17)
    url ~ text
    message ~ text
    defaultValue ~ text
  • On New Window Requested
    Event raised when new window is requested by webview with target url ,boolean ‘isDialog’ and ‘isPopup’
    component_event (10)
    url ~ text
    isDialog ~ boolean
    isPopUp ~ boolean
  • On Permission Request
    Event raised when a website asks for specific permission(s)
    component_event (11)
    permissionsList ~ list < String >
  • On Progress Changed
    Event raised when page loading progress has changed
    component_event (12)
    progress ~ int
  • On Received Http Auth Request
    Notifies that the WebView received an HTTP authentication request
    component_event (18)
    host ~ text
    realm ~ text
  • On Scroll Changed
    Event raised when webview gets scrolled
    component_event (16)
    scrollX ~ int
    scrollY ~ int
    oldScrollX ~ int
    oldScrollY ~ int
    canGoLeft ~ boolean
    canGoRight ~ boolean
  • On WebView Created
    Event raised when a webview gets created and returns created webview’s id
    image
    id ~ int
  • On WebView Changed
    Event raised when current webview gets changed and returns old and new webview’s ids
    image
    oldId ~ int
    newId ~ int
  • On WebView Removed
    Event raised when a webview gets removed and returns removed webview’s id
    image
    id ~ int
  • On Show Custom View
    Event raised when current page enters in full screen mode
    component_event (22)
  • Page Started
    Event indicating that page loading has started in web view
    component_event (19)
    url ~ text
  • Page Loaded
    Event raised when page loading has finished
    component_event (13)
  • Web View String Change
    Event indicating change in webview string
    component_event (14)
    value ~ text

Methods

  • Can Go Back
    Gets whether this WebView has a back history item
    component_method (3)
    Returns : boolean
  • Can Go Back Or Forward
    Gets whether the page can go back or forward the given number of steps
    component_method (4)
    steps ~ int
    Returns : boolean
  • Can Go Forward
    Gets whether this WebView has a forward history item
    component_method (5)
    Returns : boolean
  • Cancel Printing
    Cancels current print job. You can request cancellation of a queued, started, blocked, or failed print job
    component_method (6)
  • Clear Cache
    Clears the resource cache
    component_method (7)
  • Clear Internal History
    Tells this WebView to clear its internal back/forward list
    component_method (8)
  • Clear Location
    Clears all location preferences
    component_method (9)
  • Clear Matches
    Clears the highlighting surrounding text matches
    component_method (10)
  • Confirm Js
    Whether to proceed JavaScript originated request
    component_method (31)
    confirm ~ boolean
  • Content Height
    Returns content height of HTML content
    component_method (11)
    Returns : int
  • Continue Js
    Inputs a confirmation response to Js
    component_method (32)
    input ~ text
  • Create WebView
    Creates the webview in given arrangement by id. Horizontal and Vertical Arrangements are recommended.
    component_method (14)
    container ~ arrangement
    id ~ int
  • Current Id
    Returns current id
    image
    Returns : int
  • Dismiss Js Alert
    Dismiss previously requested Js alert
    component_method (33)
  • Download
    Downloads the file from url.Use this method with ‘OnDownloadNeeded’.
    Provide empty string in ‘fileName’ and ‘dwnloadDir’ to use default values.
    component_method (2)
    url ~ text
    mimeType ~ text
    contentDisposition ~ text
    fileName ~ text
    downloadDir ~ text
  • Evaluate JavaScript
    Asynchronously evaluates JavaScript in the context of the currently displayed page
    component_method (13)
    script ~ text
  • Find
    Finds all instances of find on the page and highlights them, asynchronously. Successive calls to this will cancel any pending searches
    component_method (14)
    string ~ text
  • Find Next
    Highlights and scrolls to the next match if ‘forward’ is true else scrolls to previous match
    component_method (15)
    forward ~ boolean
  • Get Cookies
    Get cookies for specific url
    component_method (16)
    url ~ text
  • Get Ids
    Returns a list of avilable ids
    component_method (18)
    Returns : list
  • GetInternalHistory
    Get internal history of given webview.
    image
    id ~ int
    Returns: list
  • Get Scroll X
    Return the scrolled left position of the webview
    component_method (11)
    Returns : int
  • Get Scroll Y
    Return the scrolled top position of the webview
    component_method (12)
    Returns : int
  • Get Ssl Certificate
    Gets the SSL certificate for the main top-level page and raises ‘GotCertificate’ event
    component_method (17)
  • Get WebView
    Returns webview object from id
    image
  • Go Back
    Goes back in the history of this WebView
    component_method (18)
  • Go Back Or Forward
    Goes to the history item that is the number of steps away from the current item. Steps is negative if backward and positive if forward
    component_method (19)
    steps ~ int
  • Go Forward
    Goes forward in the history of this WebView
    component_method (20)
  • Go To Url
    Loads the given URL
    component_method (21)
    url ~ text
  • Grant Permission
    Grants permissions to webview.It accepts a list of permissions
    component_method (22)
    permissions ~ list < String >
  • Hide Custom View
    Hides previously shown custom view
    image
  • InvokeZoomPicker
    Invokes the graphical zoom picker widget for this WebView. This will result in the zoom widget appearing on the screen to control the zoom level of this WebView.Note that it does not checks whether zoom is enabled or not.
    image
  • Load HTML
    Loads the given data into this WebView using a ‘data’ scheme URL
    component_method (23)
    html ~ text
  • LoadWithHeaders
    Loads the given URL with the specified additional HTTP headers defined is list of lists.
    image
    url ~ text
    headers ~ List<List>
  • Page Down
    Scrolls the contents of the WebView down by half the page size
    image
    bottom ~ boolean
  • Page Up
    Scrolls the contents of the WebView up by half the page size
    image
    top ~ boolean
  • Print Web Content
    Prints the content of webview
    image
  • Proceed Http Auth Request
    Instructs the WebView to proceed with the authentication with the given credentials.If both parameters are empty then it will cancel the request
    component_method (34)
    username ~ text
    password ~ text
  • Reload
    Reloads the current URL
    component_method (25)
  • Remove WebView
    Destroys the webview and removes it completely from the view system
    component_method (16)
  • Restart Printing
    Restarts current/previous print job. You can request restart of a failed print job
    component_method (26)
  • Resubmit Form
    Whether to resubmit form or not
    component_method (28)
    reSubmit ~ boolean
  • SaveArchive
    Saves the current view as a web archive
    image
    dir ~ string
    Note: Use absolute path here
  • Set Visibility
    Sets the visibility of webview by id
    component_method (20)
    id ~ int
    visibility ~ boolean
  • Set WebView
    Set specific webview to current webview by id.Set webview will be active and receive all method calls.
    component_method (17)
    id ~ int
  • Scroll To
    Scrolls the webview to given position
    component_method (13)
    x ~ int
    y ~ int
  • Stop Loading
    Stops the current load
    component_method (30)
  • Upload File
    Uploads the given file from content uri
    component_method (4)
    contentUri ~ text
  • Zoom By
    Performs a zoom operation in the WebView by given zoom percent
    image
    zoomP ~ int
  • Zoom In
    Performs zoom in in the WebView
    image
  • Zoom Out
    Performs zoom out in the WebView
    image

Properties

  • Ad Hosts
    Sets the ad hosts which will be blocked

    Accepts text
  • Auto Load Images
    Get/Set auto loading of images
    image
    Accepts boolean
    Default : true
  • Auto Play Media
    Get/Set auto play of media (audio/video).
    image
    Accepts bolean
    Default : false
  • Background Color
    Set background color of web view
    image
    Accepts int
    Default : 0 (Transparent) for empty webview , -1 (White) for non-empty webview and -16777216 (Black) for HTML content
  • Block Ads
    Sets whether to block ads or not

    Accepts boolean
    Default : false
  • Block Network Loads
    Get/Set block network loads
    image
    Accepts boolean
    Default : false
  • Current Page Title
    Get current page title
    image
    Returns : text
  • Current Url
    Get current url
    image
    Returns : text
  • Desktop Mode
    Get/Set desktop mode
    image
    Accepts boolean
    Default : false
  • Deep Links
    Gets/Sets whether to enable deep linking in webview
    image
    Default : false
  • Display Zoom
    Sets whether the WebView should display on-screen zoom controls
    image
    Accepts boolean
    Default : true
    Note: This property should be used before creating any webview.
  • Enable Js
    Get/Set whether the WebView should supports Js execution
    image
    Accepts boolean
    Default : true
  • File Access
    Get/Set whether the WebView can access local files
    image
    Accepts boolean
    Default : false
  • Follow Links
    Get/Set whether to follow links when they are clicked in the WebView
    image
    Accepts boolean
    Default :true
  • Font Size
    Get/Set font size of text in WebView
    image
    Accepts int
    Default : 16
  • Ignore Ssl errors
    Get/Set whether to ignore SSL errors
    image
    Accepts boolean
    Default : false
  • Load with Overview Mode
    Get/Set whether the WebView loads pages in overview mode, that is, zooms out the content to fit on screen by width
    image
    Accepts boolean
    Default : true
  • Long Clickable
    Get/Set whether text selection and context menu are enabled
    image
    Accepts boolean
    Default : true
  • Prompt For Permission
    Get/Set whether webview will prompt for permission and raise ‘OnPermissionRequest’ event or not
    image
    Accepts boolean
    Default : true
  • Scrollbar
    Set whether webview will show horizonatal and vertical scrollbar
    image
    Accepts boolean
    Default : true
  • Support Multiple Windows
    Get/Set whether the WebView supports multiple windows and raised ‘OnNewWindowRequest’ event
    image
    Accepts boolean
    Default : true
  • Use Wide View Port
    Get/Set whether the WebView should enable support for the ‘viewport’ HTML meta tag or should use a wide viewport
    image
    Accepts boolean
    Default : true
  • Visible
    Returns the visibility of current webview
    image
    Returns : boolean
  • Web View String
    Get/Set web view string
    image
    image
    Accepts string
    Default : ” “
  • Zoom Enabled
    Set whether web view supports zoom and built-in zoom controls are enabled or not
    image
    Accepts boolean
    Default : true
    Note: This property should be used before creating any webview.
  • Zoom Percent
    Set zoom percent of web view
    image
    Accepts int
    Default : 100
    Note: This property should be used before creating any webview.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

6.Downloads

7.Open Source

This extension is open source so that anyone can modify and improve it :innocent:
Here is the repo on GitHub:

GitHub: https://vknow360.github.io/CustomWebView

8.Updates

Changes

  • Fixed some spelling and grammar mistakes
  • Some internal changes

Bug Fixes

  • Fixed bug in Web View String Change event

New Events/Methods
image
image

Bug Fixes

  • Fixed bug in Grant Permission block

Changes

  • Removed un-necessary color mode from PrintWebContent method
  • Fixed spelling and grammar mistakes

New blocks
image

Changes

  • Added deep links support
  • Added external links support.Now it will try to open externally taped links in your app.
  • Added custom fiilee uploading method.

Bug Fixes

  • Fixed bug in PrintWebContent method
  • Fixed bug in EvaluateJavaScript method
  • Fixed several spelling and grammar mistakes

New blocks
image

Changes

  • Added secondaryUrl parameter in LongClicked event
    component_event (17)|305x8550%

New Blocks

Changes

  • Added ‘id’ parameter in CreateWebView method
  • Added ‘mimeType’ and ‘isCaptureEnabled’ values in FileUploadNeeded event
  • Removed most of the designer properties
  • Some internal changes
  • Fixed grammar and spelling mistakes

New Blocks



Bug Fixes

  • Fixed bug in PrintWebContent method
  • Fixed bug in FileUploadNeeded method

What’s new

  • Ad Blocker

Changes

  • Re-added some properties to designer
  • Added missing permissions

Bug Fixes

  • Fixed bug in LongClickable property

New Blocks




Changes

  • Added id parameter to OnNewWindowRequest and removed the url parameter
  • Clicked url will open Screen1 with list of url and 1
  • Web Shortcut will open Screen1 with a list of url and 2
  • Events will be only triggered for active webview (Set using SetWebView method)

Bug Fixes

  • Fixed bug in UploadFile method
  • Fixed bug in CurrentId method (it was not resetting after removing webview)
  • Fixed bug in GetCookies method (it was returning null instead of empty string)

New Blocks

Changes

  • Added id variable to important events
  • Added custom screen open support to ‘Browser’ and ‘Shortcut’ feature.
    For Browser: store screen name in ‘sn’ tag in default instance of TinyDB
    For Shortcut: store screen name in ‘ssn’ tag in default instance of TinyDB
    However, for first time and in case value is not stored then Screen1 one will be opened by default.
  • Added more accuracy to scroll methods
  • Removed some un-necessary methods

Bug Fixes

  • Fixed bug in IgnoreSslErrors property
  • Fixed some other minor bugs

New blocks

image

Bug Fixes

  • Fixed bug in whatsapp:// URLs
  • Fixed bug in Download method (added compatibility for API 29)
  • Minor bug fixes
 

Changes

  • Some minor/internal changes

New Blocks
image
Note: These blocks are of CustomWebViewHelper extension and not of CustomWebView extension
Changes

  • Your app will be added to browsers list only when you use CustomWebViewHelper extension in your project.
  • You can now set screen which will be opened when user selects your app to browse a link.
    Also app will be resumed if it is running else it will be opened.
    To get url use CustomWebViewHelper extension.

Bug Fixes

  • Some minor bug fixes
 

Bug Fixes

  • Fixed click bug
Subscribe
Notify of
121 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
1 year ago

can you send the aia file to email
email: [email protected] 

Raj kumar
1 year ago

Hello sir,
I am Raj kumar. I have got a serious issue with my app. My app is published on the play store but I am still getting emails to fix the file based cross site scripting issue in the webviewer of my app. I don’t understand how can I fix this issue. I am quiet impressed with your custom webviewer but I don’t know whether it can solve my problem or not. If you know the solution of this issue please mail me at [email protected]

Here is the screenshot of the mail I got from the play store please have a look at this picture.

Capture.PNG
Raj kumar
Reply to  Raj kumar
1 year ago

Link to the Google help center- https://support.google.com/faqs/answer/7668153

Raj kumar
Reply to  vknow360
1 year ago

I am really sorry disturbing you again
How do I edit the manifest file?
Can you please elaborate.
What steps I need to follow?
I searched on google and found that through decompiling the apk we can do it?
Is it safe for the play store?

Raj kumar
Reply to  vknow360
1 year ago

I have added this in the manifest

But I did not find this one

webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setInitialScale(1);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccess(true);

Where do I put this?
I don’t understand, please help me again.

Screenshot_20200919_095311.jpg
Raj kumar
Reply to  Raj kumar
1 year ago

I have added this one in the manifest
Enabled safe browsing

But I did not find this one

webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setInitialScale(1);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccess(true);

Where do I put this?

Screenshot_20200919_095311.jpg
Last edited 1 year ago by Raj kumar
Raj kumar
Reply to  vknow360
1 year ago

Still getting another problem😫😫😫
Take a look at this how do I fix this now.

20200919_235322.jpg
Fábio vieira
Reply to  Raj kumar
9 months ago

Hi,
I’d like to know how you solve this issue…Could you tell me?

Gustavo Niederauer
1 year ago

Hi. What are the blocks to download a file using this customwebviewer ? I Need to download a .pdf file from a site. I was using extendedwebview component and it was downloading fine. Now, with CustomWebview I am getting Runtime Error: Unsupported path /storage/emulated/0/Download or Not one of standard directories
And this is my block. Am I missing something?

Last edited 1 year ago by Gustavo Niederauer
Gustavo Niederauer
Reply to  vknow360
1 year ago

Great! Thanks.

Gustavo Niederauer
Reply to  vknow360
9 months ago

Hi. Did you update the extension to allow writing to external storage?

Gustavo Niederauer
1 year ago

this is my block

blocks.jpg
Raj kumar
1 year ago

Hello sir,
My question is how do I open external links in my app. I mean to say if I want to open a link from whatsapp and redirect it to my app. What blocks should I use for this?

sonawanesarvesh
11 months ago

Hello
I am using kodular + OneSignal Push notifications

I am sending push notifications with launch_url and app_url (in additional data)

Example –

Wanted to know when we click on notification link – how can i open app and open specific app_url

As of now when i click on notification – it opens browser

sonawanesarvesh
11 months ago

Hello

I have webview app in kodular and using your custom webview.
wanted to create short cut of application on desktop
I dont understand where to put the create shortcut block

i mean on screen1 initialize or under any other block?

sonawanesarvesh
Reply to  vknow360
11 months ago

Hello
this is my block
somehow i made mistake i guess – the short cut is not getting added to the mobile phone`s screen

Please correct me
(i tried giving logo path as = 1) assets/logo.png 2) logo.png 3) complete logo URL as shown in block..

nothing worked for me

block.jpg
sonawanesarvesh
Reply to  vknow360
11 months ago

Hello

I tried
1) /storage/emulated/0/Makeroid/assets/logo.png
2) assets/logo.png

both did not worked

sonawanesarvesh
Reply to  vknow360
11 months ago

Hello

Apologies for delayed response –

Yes i see there is permission in AndroidManifest

<uses-permission android:name=“android.launcher.permission.INSTALL_SHORTCUT”/>

And i used the path as assets/logo.png

Gustavo Niederauer
11 months ago

Hello, I have a webpage that has mapbox geolocation script on it. But when using the custom webviewer doesn’t work. Is there any block that I should enable/allow the script to get the user location?
I have already kodular location blocks set. But I would like to remove them and only use the website script.

Gustavo Niederauer
Reply to  vknow360
11 months ago

Thanks. But can you show me the codes I need to add? I had them already enabled: UserLocation and PromptForPermission in properties I tried but seem to now work
data:image/png;base64,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

bibek barman
11 months ago

How to load local html file?

gjs
9 months ago

haii extension cont handle javascript alerts ,

when alert raises it wont show any message to screen and it stucks and not work any other function

but url message will show in block but not returns result to site

try this url

https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert

i want this function for my project but extension not handles

my blocks are straight jut load this url and click button in this site
nothing happening…. i try all methods nun working

how to handle it

Last edited 9 months ago by gjs
gjs
Reply to  vknow360
9 months ago

*****************Thanks for your reply *********************

** dismiss alert returns ==> true 

site wont respond 

i tried all methods

still not working … 

screen will stuck no next operation executed …  

i thing its bug … please test once  

load this url => https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert

test once in kodular … and share me blocks 

because my original site have lot of alerts. . i want handle all alerts generated by javaScripts

so i want this function as fast as possible

gjs
Reply to  vknow360
9 months ago

VERY VERY THANKS ITS WORKS FINE NOW …

AND MAKE ONE FAVOR …..

***HOW CAN I INJECT LOCAL JAVASCRIPT FILE INTO SITETS … WITHOUT USe Evaluate js directly typing scripts ….

i saw some apps when reverse engineering .. they contains ./assets folder jquary-mini.js …. css and some othre files ….

my motive is simple content script will inject into site in-staid of typing in Evaluate js block ….

i am not well coder in java but well knew javascript ….

because every time typing in javascript will some confusing

so please make me some blocks to inject javascript .. like local javascript file inject into ___*****non local website***** ____

gjs
Reply to  gjs
9 months ago

and .. also some sites redirect to open links in new tabs

how can i handle … these type …

open in new tab and back to original tab

Last edited 9 months ago by gjs
Alex
9 months ago

Hello, how can I remove my application from the Standard Browser?

Masud Rana
9 months ago

send aia .
web viwer auto click a button
5.Click on a button
To perform onClick function we shall have to call click() for that element.
Js: document.getElementById("btn_id").click();

gjs
Reply to  Masud Rana
9 months ago

i think this helps for you

evjs.PNG
Emil
9 months ago

Hello there. I tried several ways of downloading files, but nothing worked. Can you post a working block? Please help. I searched Everywhere, I could not find the solution to the problem anywhere.

Emil
Reply to  Emil
9 months ago
Emil
Reply to  vknow360
8 months ago

I do that. It didn’t work again.

blocks (3).png
Emil
Reply to  vknow360
8 months ago

I’ve tried a few ways. Not working.

Emil
Reply to  vknow360
8 months ago
Emil
Reply to  vknow360
8 months ago

I tried it too, it doesn’t work

Emil
Reply to  vknow360
8 months ago

I’ve tried it on many sites. There is no action when I hit the download button. I’ve given permission to download it

Emil
Reply to  vknow360
8 months ago

I think I found the problem. downloads what is in the same tab, cannot download what is in the new tab.

Emil
Reply to  Emil
8 months ago

I think such a process is needed. What blocks do I have to add here?

https://yadi.sk/i/euk6fvB1n3xruw
https://yadi.sk/i/rgmr7hk_ZkIxqg

Last edited 8 months ago by vknow360
Emil
Reply to  Emil
8 months ago

This block worked. How can I go back to the old page? Please I would appreciate it if you say in this block. Thank you.

blocks (4).png
Rudra
9 months ago

Hi Sunny, Actually I made a video conferencing app with your extension and it’s working finely but, screen sharing isn’t working. Can you please help me out

Peter Ramsis
8 months ago

unsupported path error while downloading

alex8
8 months ago

Please add _Modifed_v10.aix

8 months ago

hello i need the four version,please the version ten not function

Aman
8 months ago

Hi sunny in your extension webview we can’t open links,like YouTube description links,mediafire links and other links help please

Adeeb
8 months ago

I am using version 10,when i click Whatsapp share button in my website through app it is not opening anything
did i need to add any specific permission

blocks (3).png
THE WEB DESIGNER
7 months ago

when a specific link is clicked my app must be open and the url must load in my webview

i have posted the question in kodular community they said me to use this extension

but i dont know how to do it please tell

Akbar
Reply to  THE WEB DESIGNER
7 months ago

I also want to do this how to do

7 months ago

awesome bro

aia
7 months ago

Does not work at all, no site goes down to the app

sonawanesarvesh
6 months ago

Hello
Thank you for creating this wonderful extension with enormous possibilities .. proud of you

I want little help

I tried this block to open external links and it worked really very well – PFA

but when the external link is opened, the back button is not working, so how can we enable the return back to the previous webview?

Also, I have one more usecase – if the external link is a WhatsApp chat link – the expected flow is – when clicked on external WhatsApp link – it should open Whatsapp App – like happening on a real website

Sample steps –

1) webview is added to site http://www.one.com
2) added Whatsapp chat button icon to http://www.one.com as an external link
3) when clicked on the WhatsApp icon – it opens – https://api.whatsapp.com/someparameters
on mobile, it waits for a second and automatically opens the actual WhatsApp app

Right now above the last step is not happening

de9455081bc958f163b30f9ee11a61894f04241e.png
sonawanesarvesh
Reply to  vknow360
6 months ago

Hi,

On my website there are some external links – such as WhatsApp chat icon
(when clicked on it – it opens in a new tab)

With the above kodular block I am able to open such links, but the back button is not working and I am not able to return back to my webview.

So can I open such external links into external browsers instead of the same webview, so that end-user can access both easily (webview & browser link)

sonawanesarvesh
Reply to  vknow360
6 months ago

Hello
I am able to open external links but links are opening in the same webview / app and back button is not working

Either my back button should work or I want external URLs should open in a separate browser

hope this time i am more clear

blocks.png
Battman
6 months ago

Hi! Thank you for this amazing extension. May I ask, if you could add to the next version the possibility to run an Intent when the url protocol is different than http, https, javascript and file. In example if the protocol is mailto: tel: or zoom: it could be possible to open the default app just putting the url in an intent inside the shouldOverrideUrlLoading. It’s about catching the ERR_UNKNOWN_URL_SCHEME.

Moreover: the <input type=”file”> does not work in this customwebview. In the kodular original one it works opening the file manager to select a file.
Thank you again. Greetings

Last edited 6 months ago by Battman
6 months ago

Hi Sunny – a number of images are not displaying on this page.

sonawanesarvesh
6 months ago

Hello Sunny

I am using latest version 10.1

For OnNewWindowsRequest Block
I see id, instead of url as shown in your documentation

is it ok?

component_event.png
Kaun tehs
6 months ago

Would you be kind enough to tell me how did you make this extension? I tried appy builder editor with no luck. Thank you

Juan
6 months ago

Hello Sunny,

I tried to get ads out of youtube using BlockAds, but it didn’t work.

The video opens normally without the advertisements at the beginning, but the ones in the middle of the video remain ….

Is it possible to delete all ads?

Last edited 6 months ago by Juan
Juan
Reply to  vknow360
5 months ago

I got it.

Thanks for your answer.

But would it be possible to do?

Is it too difficult to fix this?

I particularly find it an abuse on Youtube to place 10 advertisements in a video of less than 1 hour. I think this is ridiculous.

Do you think the webview would be too slow to work well?

How much would you charge to do, in case I really think it’s necessary?

Kuntehskn
5 months ago

Hello Sunny
I have a question, when I set blockads to true, the app crashes. If I leave it to false then the app works fine. I create a new webview, set the weview and then set the gotourl. Any suggestions? I am using your latest version
thank you for your time

Last edited 5 months ago by Kuntehskn
Kuntehskn
Reply to  vknow360
5 months ago

oh ok. Thanks

5 months ago

Hello Sunny,
I have a problem with this plugin. The video also gets stuck while playing the video in landscape mode. Video is played by tapping sound and image also slip. How can I fix this problem?

Last edited 5 months ago by Çağatay
Bingo Apps
5 months ago

So far it looks amazing,
But i am looking for a extension which can solve my issue.

File-based XSS
Your app(s) are using a WebView that is vulnerable to file-based cross-site scripting.

If this extension can solve this issue please let me know the procedure .

Regards

5 months ago

Hi Sunny – the images of Blocks and Functions are not displaying 🙁

md mahfuz
5 months ago

Custom webview any link is not opening when clicking in youtube or Google help please

Douglas
3 months ago

Please add block for load source-code on page loaded into webview to string, salve to archeive is not working

juraij
11 days ago

in custom webview it not open links in website please help me

Muhammed Juraij A
Reply to  vknow360
11 days ago

Here is my blocks

Screenshot_20211008_094546.jpg
samskomsel
1 day ago
Awaiting for approval

Hi, can you make a tutorial how to use adblock? How to enter adhost? can i enter more than 1 adhost? I tried various ways to activate adblock but failed