在 android 和 ios 中加载并执行脚本

Posted

技术标签:

【中文标题】在 android 和 ios 中加载并执行脚本【英文标题】:load and execute a script in android and ios 【发布时间】:2018-01-31 22:12:24 【问题描述】:

我的要求:

这应该适用于 androidios 我想从文件(不一定通过网络)加载脚本(可以是 javascript 或 Lua 或任何其他脚本语言) 脚本应该在后台线程中运行,并且能够发布到 UI 线程 我想在 iOS 和 Android 中使用相同的脚本,以便我可以在 Android 和 iOS 应用程序中重复使用脚本代码

我有哪些选择?

【问题讨论】:

【参考方案1】:

WebView Android 启用了 Javascript

我认为 iOS 中的 SFWebView 也支持 Javascript。

不确定是否可以在后台线程中使用它,因为 Android Webview 只会在 UI 线程上运行

【讨论】:

我希望不用 WebView。还是谢谢。【参考方案2】:

回答: 1. 您必须将 html 加载到字符串中:

private String readHtml(String remoteUrl) 
String out = "";
BufferedReader in = null;
try 
    URL url = new URL(remoteUrl);
    in = new BufferedReader(new InputStreamReader(url.openStream()));
    String str;
    while ((str = in.readLine()) != null) 
        out += str;
    
 catch (MalformedURLException e)  
 catch (IOException e)  
 finally 
    if (in != null) 
        try 
            in.close();
         catch (IOException e) 
            e.printStackTrace();
        
    

return out;

    使用基本 URL 加载 WebView:

     String html = readHtml("Your Web URL");
     mWebView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", "");
    

在这种特殊情况下,您应该将要在页面上使用的所有 .js 文件保存在项目的“assets”文件夹下的某个位置。例如:

 /MyProject/assets/jquery.min.js

    在您的远程 html 页面中,您必须加载驻留在应用程序中的 .js 和 .css 文件,例如:

这同样适用于所有其他本地资源,如图像等。它们的路径必须以开始

file:///android_asset/

WebView 将首先加载您作为字符串提供的原始 HTML,然后选择 .js、.css 和其他本地资源,然后加载远程内容。

【讨论】:

我希望不用 WebView。还是谢谢。【参考方案3】:

在 android 中,将页面加载到 webview 中时。拦截脚本调用。

public WebResourceResponse shouldInterceptRequest(WebView view, String url) 
 if ( url.endsWith("script.js") ) 
    AssetFileDescriptor fileDescriptor = assetManager.openFd("script.js");
    FileInputStream stream = fileDescriptor.createInputStream();
    return new WebResourceResponse("text/javascript","UTF-8",stream);
 

Webview 在 ui 线程上运行。我不确定是否有办法从后台线程加载网络资源。

【讨论】:

我希望不用 WebView。无论如何,谢谢。

以上是关于在 android 和 ios 中加载并执行脚本的主要内容,如果未能解决你的问题,请参考以下文章

在Arccatalog中加载并查看已经发布的地图服务

如何检查您的网站是不是已在 iframe 中加载并获取父 URL? [复制]

Android动态加载代码技术

如何在 ios 和 android 中加载自己的地图服务

如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly

如何在android 7中加载html之前在webview中注入javascript脚本