在android和ios

时间:2017-08-23 10:54:44

标签: javascript android ios lua

我的要求:

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

我有什么选择?

3 个答案:

答案 0 :(得分:0)

已启用Javascript的

WebView Android

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

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

答案 1 :(得分:0)

答案: 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;
}
  1. 使用基本URL加载WebView:

     String html = readHtml("Your Web URL");
     mWebView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", "");
    
  2. 在这种特殊情况下,您应该将要在页面上使用的所有.js文件驻留在" assets"项目文件夹。例如:

     /MyProject/assets/jquery.min.js
    
    1. 在远程html页面中,您必须加载驻留在应用程序中的.js和.css文件,如:

    2. 同样适用于所有其他本地资源,如图像等,其路径必须以

      开头
      file:///android_asset/
      

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

答案 2 :(得分:0)

在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线程上运行。我不确定是否有办法从后台线程加载webresources。