浏览器对象

主类-Browser

runBrowser

  • 功能简介: 1:将UC切换到前台显示。2:打开指定网页。

  • 应用场景:

    场景1:调用UC加载指定

    场景2:当插件在前台时,调用UC的UI。UC不会自己切到前台,这个时候需要使用该API来完成这个操作

  • 版本号:1.0

overstatement

  • 功能简介: 获取当前UC的状态。包含:是否在前台,是否可交互等状态

  • 应用场景:场景1:插件想根据UC的状态来决定是否需要将UC调切换至前台。

  • 版本号:2.0

disConnect

  • 功能简介: 断开与UC的链接

  • 版本号:1.0

基础工具-Browser.util

getBrowserScreenShot

  • 功能简介: 获取UC屏幕截图

  • 成功案例:分享插件

  • 应用场景:分享插件:截取图网页中有趣的信息分享给好友。

  • 版本号:1.0

showDialog

  • 功能简介: 调用UC的Dialog

  • 版本号:1.0

dismissDialog

  • 功能简介: 根据dilaogId

  • 版本号:2.0

showBanner

  • 功能简介:显示UC的banner

  • 版本号:1.0

showToast

  • 功能简介:显示UC的Toast

  • 版本号:1.0

showFloatView

  • 功能简介:在UC中显示一个浮动窗口

  • 成功案例:手势插件

  • 应用场景:手势插件:在UC添加手势浮动按钮及手势涂鸦面板,完成手势插件的总体功能。其它:在UC添加自定义浮动View,增强UC功能体验并同时增强自己插件的曝光率。

  • 版本号:2.0

updateFloatView

  • 功能简介: 更新浮动窗口

  • 成功案例:手势插件

  • 版本号:2.0

dismissFloatView

  • 功能简介:隐藏浮动窗口

  • 成功案例:手势插件

  • 版本号:2.0

isFloatViewShowing

  • 功能简介:获取指定的remoteView是不是正在显示

  • 成功案例:手势插件

  • 版本号:2.0

getSelectionText

  • 功能简介:得到当前选中文本

  • 版本号:1.0

getFavicon

  • 功能简介:通过url取得页面的icon

  • 版本号:2.0

isBrowserActive

  • 功能简介:检测UC是否在运行

  • 版本号:1.0

getBrowserLanguage

  • 功能简介:获取UC当前语言

  • 版本号:1.0

executeCommand

  • 功能简介:执行通用命令。可以使用该API“刷新当前页面”和“打开UC的功能窗口(包含:书签/历史窗口,下载管理窗口,文件管理等等)”,详细看ExecuteCommandArg的定义。

  • 成功案例: 手势插件

  • 应用场景:通过自定义手势打开UC指定功能界面。

  • 版本号:2.0

saveCurrentPage

  • 功能简介:保存当前网页到指定路径。

  • 版本号:2.0

    startActivity

  • 功能简介: 启动Activty不包含切换动画 视频管理

  • 版本号:2.0

Browser.tabs

create

  • 功能简介: 新建窗口打开一个URL链接

  • 版本号:1.0

remove

  • 功能简介: 根据tabId删除一个窗口

  • 版本号:1.0

update

  • 功能简介: 更新窗口

  • 版本号:1.0

getCurrentTab

  • 功能简介: 获取当前窗口属性信息

  • 版本号:1.0

getAllTabs

  • 功能简介: 获取所有窗口的属性信息

  • 版本号:1.0

getTabPropert

  • 功能简介: 根据tabId获取窗口信息

  • 版本号:1.0

pageUp

  • 功能简介: 页面向上滑动

  • 版本号:1.0

pageDown

  • 功能简介: 页面向下滑动

  • 版本号:1.0

goForward

  • 功能简介: 指定窗口页面向前翻页

  • 版本号:1.0

zoomIn

  • 功能简介: 页面缩小

  • 版本号:1.0

zoomOut

  • 功能简介: 页面放大

  • 版本号:1.0

loadjavascript

  • 功能简介: 为指定标签页面注入Javascript代码

  • 成功案例:惠惠比价插件

  • 版本号:2.0

导航-Browser.navigation

addItem

  • 功能简介: 添加导航条目

  • 版本号:2.0

existItem

  • 功能简介: 以title和url组合为唯一键判断导航是否存在

  • 版本号:2.0

下载-Browser.download

addTask

  • 功能简介: 添加一个下载任务

  • 成功案例:视频管理插件

  • 版本号:2.0

pauseTask

  • 功能简介: 暂停一个下载任务,用start继续下载

  • 版本号:2.0

cancleTask

  • 功能简介: 取消一个下载任务

  • 版本号:2.0

startTask

  • 功能简介: 开始一个下载任务

  • 版本号:2.0

queryTask

  • 功能简介: 查询一个任务状态

  • 版本号:2.0

restartTask

  • 功能简介: 重新启动一个下载任务

  • 版本号:2.0

registerStatusChangeListener

  • 功能简介: 注册状态变化的listener,同add时传入的listener相同,这个函数更多用于UC退出重启后,插件对于监听者的重连操作

  • 版本号:2.0

文件-Browser.fileManager

openDirectory

  • 功能简介: 打开指定文件目录

  • 版本号:2.0

历史-Browser.history

search

  • 功能简介: 查询UC浏览器页面浏览历史记录

  • 成功案例:视频管理插件

  • 版本号:2.0

delete

  • 功能简介: 删除浏览器页面浏览UC历史记录

  • 成功案例:视频管理插件

  • 版本号:2.0

DEMO1-显示浮窗

如果你想在浏览器上显示一个浮窗,可以使用Browser对象的showToast方法。

package com.uc.demo;

import com.uc.addon.sdk.remote.AbstractExtension;
import com.uc.addon.sdk.remote.Browser;
import com.uc.addon.sdk.remote.protocol.ToastBuilder;

public class ShowToastDemo extends AbstractExtension{

    @Override
    public void onInvoke() {
        ToastBuilder toastBuilder = ToastBuilder.makeText("This is a toast shown by addon", ToastBuilder.SHORT_DURATION);
        Browser browser = getBrowser();
        browser.util.showToast(toastBuilder);
    }
}

相关配置文件如下面所示:

<?xml version="1.0" encoding="utf-8"?>
<addon name="ShowToast"
       icon="icon.png"
       versionCode="1"
       minSdkVersion="2.0">

    <uses-permission name="addon.permission.TOAST" />

    <extension name="com.uc.demo.ShowToastDemo"
        description="Show Toast"
        location="AddonBar"
        icon="icon.png">
    </extension>
</addon>

当你点击该插件时,浏览器窗口会显示一个浮窗。
注意:对这个插件,需要在配置文件中添加TOAST权限。(了解更多权限)

效果

DEMO2-向页面注入js代码

如果你希望利用插件向页面注入js代码,你可以使用Browser.tab.loadJavascript(int tabId, JSParam jsParam, AbstractJSExtension jsExtension)方法。该方法提供三个参数:标签页id, 包含js内容的JSParam对象, 以及用于接收js回调请求的AbstractJSExtension的对象。
js代码注入和运行流程如下:

一个简单的示例:

package com.uc.demo;

import android.widget.Toast;

import com.uc.addon.sdk.remote.AbstractExtension;
import com.uc.addon.sdk.remote.AbstractJSExtension;
import com.uc.addon.sdk.remote.protocol.JSParam;
import com.uc.addon.sdk.remote.protocol.StringUtil;
import com.uc.addon.sdk.remote.protocol.TabProperties;

public class LoadJsDemo extends AbstractExtension{

    @Override
    public void onInvoke() {

        // !!注意:Tab.loadJavaScript方法中会将JS脚本放置于闭包环境中
        String js = "(function(){" +
            "alert('ucweb');" + 
        "})();";

        // 获取当前标签页的信息
        TabProperties tabProperties = getBrowser().tabs.getCurrentTab();
        if (null == tabProperties) {
            Toast.makeText(getApplicationContext(),
                    "getBrowser().tabs.getCurrentTab() return null", Toast.LENGTH_LONG).show();
        }

        // 通过URL匹配决定是否注入
        if ((false == StringUtil.isEmpty(tabProperties.url)) && tabProperties.url.indexOf("ucweb.com") > -1) {
            JSParam jsParam = new JSParam();
            jsParam.javascript = js;
            getBrowser().tabs.loadJavascript(tabProperties.id, jsParam, new AbstractJSExtension() {

                @Override
                public String onInvoke(int tabId, String method, String argsJson) {
                    return null;
                }
            });
        } else {
            Toast.makeText(getApplicationContext(), "ExtensionLoadJavascript提示:Demo已锁定匹配ucweb.com进行注入测试, 请打开ucweb.com", Toast.LENGTH_LONG).show();
        }

    }
}

如果用户在ucweb.com页面点击该插件,js代码便会注入到页面中。这个示例的效果是弹出警告框。
在上面这段代码中,我们看到Browser.tabs.loadJavascript只是简单地使用继承自AbstractJSExtension的匿名内部类作为参数,这是因为示例的js代码不需要对插件进行回调。如果你希望js向插件返回结果,那你需要继承AbstractJSExtension类并实现它的onInvoke方法。对应的,js脚本以下面的方式回调插件:

//JS
// UCAddon为UC浏览器向插件开放的JS对象
// UCAddon.invoke的参数名有点长,请开发者自行封装。
var resultStr = UCAddon.invoke(
    // packageName    插件应用包名
    "com.uc.demo",
    // AbstractJSExtension 继承自AbstractJSExtension的对象名  
    "com.uc.demo.JSExtension", 
    "getName", 
    JSON.stringify({
        text: "Js携带参数"
    }),
    // 用于验证校验扩展参数(!!请开发者不要改动该参数)
    "{{UC_ADDON_EXT}}"
);

上面,“getName"参数对应于AbstractJSExtension.onInvoke方法的method参数,AbstractJSExtension对象可以根据该参数将请求分发给不同的方法处理,例如:

//Java AbstractJSExtension
public String onInvoke(int tabId, String method, String argsJson) {
    if ("getName".equals(method)) {
        return getName(tabId, argsJson);
    }
    return null;
}

UCAddon.invoke方法中,json格式的字符串参数用于向AbstractJSExtension对象传递数据,由AbstractJSExtension.onInvoke方法的argsJson参数接收。

如果想要获得更加详细的例子,可以在这里下载,并参考其中的com.uc.browser.addon.sample.ExtensionLoadJavascript类。

因为该示例不需要对插件回调,所以上面js回调部分我们可以暂时忽略。对应的,该插件的配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<addon name="LoadJs"
       icon="icon.png"
       versionCode="1"
       minSdkVersion="2.0">

    <uses-permission name="addon.permission.JS" />
    <uses-permission name="addon.permission.TAB" />

    <extension name="com.uc.demo.LoadJsDemo"
        description="Load Javscript"
        location="AddonBar"
        icon="icon.png">
    </extension>
</addon>

注意:如果你想使用js相关的API,你需要为插件配置JS权限。(了解更多权限)

效果