从 url Android Studio 注入 CSS

Posted

技术标签:

【中文标题】从 url Android Studio 注入 CSS【英文标题】:Inject CSS from url Android Studio 【发布时间】:2018-07-16 11:47:02 【问题描述】:

我正在使用 InjectCSS 脚本在 webview 上使用额外的 css 文件。 但是脚本从 assets 文件夹中获取 CSS 文件,我希望 css 文件在外部托管。

    private void injectCSS() 
    try 


        InputStream inputStream = getAssets().open("style.css");

            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            inputStream.close();

            String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
            wv.loadUrl("javascript:(function() " +
                    "var parent = document.getElementsByTagName('head').item(0);" +
                    "var style = document.createElement('style');" +
                    "style.type = 'text/css';" +
                    // Tell the browser to BASE64-decode the string into your script !!!
                    "style.innerhtml = window.atob('" + encoded + "');" +
                    "parent.appendChild(style)" +
                    ")();");

     catch (Exception e) 
        e.printStackTrace();
    

我尝试将输入流更改为 url,但没有成功。

InputStream inputSteam = new URL("http://www.website.com/folder/style.css").openStream();

【问题讨论】:

有人可以帮助我吗? 【参考方案1】:

如果需要使用BASE64-encode,需要this

InputStream inputSteam = new URL("http://www.website.com/folder/style.css").openStream();
String encoded  = new String(readBytes(inputStream),  Base64.NO_WRAP);

// ...


public byte[] readBytes(InputStream inputStream) throws IOException 
    // this dynamically extends to take the bytes you read
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

    // this is storage overwritten on each iteration with bytes
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];

    // we need to know how may bytes were read to write them to the byteBuffer
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) 
        byteBuffer.write(buffer, 0, len);
    

    // and then we can return your byte array.
    return byteBuffer.toByteArray();

【讨论】:

以上是关于从 url Android Studio 注入 CSS的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )

Android Studio 生成 Xutils3 注入的插件

Android Studio:将 URLS 从 URL 保存到数组

从 Android Studio 中的 URL 解析 XML

Android Studio 从 Textfield 获取价值并将其插入 API url

Android Studio 中的 JSON 语言注入?