OpenJS (3.0 Beta) 开始使用 环境变量 接口 应用案例 (演示代码) 新 常见问题 新 历史更新 成功案例

OpenJS 3.0 Beta

OpenJS是腾讯微博开放平台提供的Javascript库,开发者使用该库可以轻松完成腾讯微博用户授权,访问API接口,调用官方组件等功能,支持多种应用部署环境及无缝迁移。

如果你需要实现网站与腾讯微博连接,或者开发微博应用,只需要在页面上引入OpenJS,就可以轻松实现这些功能。相比传统的接入方式,如OAuth1.0,Openid&Openkey等,它具有以下优势:

更新说明

开始使用

在页面中引用OpenJS的方式分同步加载和异步加载两种。若用同步加载的方式,为优化网站性能,建议将OpenJS放置在页面底部加载[链]。若用异步加载的方式,开发者须进行异步编程。开发者可根据自己的项目情况,自由选择。

环境变量

OpenJS默认的运行环境参数配置基于大多数人的需要,一般情况下不需要做任何设置。在某些特殊情况下,开发者可以通过设置环境变量,改变OpenJS的默认行为。环境变量以Fragment URL[链]的形式传递,不区分大小写。


<script src="//mat1.gtimg.com/app/openjs/openjs.js#debug=yes"></script>
debugBoolean
默认值:false(不开启调试模式)

开启Debug模式有助于跟踪调试,建议在开发过程中开启。

logLevelNumber
默认值:0(输出全部日志)

值越大意味着输出Log输出的信息越少越重要,默认输出尽可能详细的Log。

crossDomainMethodString
默认值:'auto'(自动检测)

该参数可指定跨域解决方案。默认情况下OpenJS自动检测当前浏览器,并适配一种最优的方案,假如开发者十分确定要采用的跨域方案(如:iPhone应用)可以指定该参数。关于跨域的更多问题,请阅读 FAQ

html5 使用postmessage跨域
flash 通过flash代理跨域(要求Flash Player 9以上)
cookieDomainString
默认值:''

OpenJS需使用Cookie保存用户的授权信息,此参数控制该Cookie[链]的domain域

cookiePathString
默认值:'/'

与cookieDomain一样,此参数控制Cookie[链]的path域。如果你不想把腾讯微博用户授权信息保存在根路径下,请设置此环境变量进行控制。

autobootBoolean
默认值:true(尽早加载跨域方案)

为真时先于init方法加载跨域方案,为假时等init执行时再加载跨域方案。


若为腾讯域内应用[链],因为不再需要跨域,crossDomainMethod 自动失效。

腾讯微博API调用

initT.init(inInitOpts)
初始化。

<script>
    T.init({
        appkey:801124054
    });
</script>
inInitOpts必选Map
appkey必选String
默认值:无

开放平台appkey,据协议和平台的差异性有时又叫appid或client id。

callbackurlString
默认值:当前页面网址

用户授权成功后的回跳页面地址,如不设置则为当前页面网址。回跳页面地址必须与appkey匹配[链],否则无法完成授权。建议开发者在服务器上部署一个带有提示性文字的html文件,并把callbackurl指向这个文件,以带来更好的用户体验。关于此参数的更多细节问题,请阅读 FAQ

autocloseBoolean
默认值:true(自动关闭授权窗口)

默认自动关闭授权窗口,授权页面一旦回跳到开发者指定的callbackurl就立刻关闭授权窗口。为假则没有此操作,开发者需要自行关闭窗口 (调用浏览器的window.close接口)。

samewindowBoolean
默认值:false(弹新窗口授权)

默认为弹新窗口授权,否则在同一窗口完成授权(类似OAuth1.0的体验),此方法用来解决某些浏览器安装了第三方弹窗屏蔽插件,造成无法授权的问题。

注意,在此情况下开发者必须自己处理授权返回的token,如果您不想编写代码,也可以使用我们提供的通用方案[链]

在一般情况下,开发者无须担心弹出的授权窗口被浏览器屏蔽,因为授权行为一般是由用户主动点击触发,浏览器不会进行屏蔽。


<script>
    // 注意:
    // 采用弹窗授权模式的应用可以不用这样构造callbackurl
    // 以下代码只针对samewindow为true的情况,并且采用通用方案时
    // 使用

    // path_to_callbackurl 是指您部署的通用方案网址
    // return_to 后的参数 your_app_url 是指用户成功授权后页面要
    // 跳转到的网址,一般应该是应用的入口
    // appkey 后的参数 your_appkey 是固定字段,指开发者的appkey
    T.init({
        appkey: 801124054,
        samewindow: true,
        callbackurl:["path_to_callbackurl?"
                    ,'return_to=','your_app_url'
                    ,'&appkey=',your_appkey].join("")
    })
</script>
pingbackBoolean
默认值:true(发送报告)

向服务器发送技术报告帮助我们更好的完善OpenJS。由于我们的技术报告接收服务器只支持http协议,因此如果您的应用采用https协议,为避免浏览器出现网页不安全的提示,此选项会被自动禁用。


若为腾讯域内应用[链]T.init 参数表为:

inInitOpts必选Map
appkey必选String
默认值:无

开放平台appkey,据协议和平台的差异性有时又叫appid或client id。

showappinfoBoolean
默认值:true(显示应用信息)

若为真当用户首次使用你的应用时,将显示应用信息及授权按钮。为假则忽略授权步骤,直接获取用户的授权。

pingbackBoolean
默认值:true(发送报告)

向服务器发送技术报告帮助我们更好的完善OpenJS。由于我们的技术报告接收服务器只支持http协议,因此如果您的应用采用https协议,为避免浏览器出现网页不安全的提示,此选项会被自动禁用。

§

loginT.login(inSuccessHandler,inFailHandler)
用腾讯微博帐号登录授权应用,并根据授权结果回调相应函数。


<script>
    T.login(function (loginStatus) {
        alert(loginStatus.nick);
    },function (loginError) {
        alert(loginError.message);
    });
</script>
inSuccessHandler(inLoginStatus)Function
默认值:无

用户登录授权成功后要执行的函数。

inLoginStatusMap
回调数据

包含用户登录信息。

access_token 授权后获得的OAuth2.0 Accesstoken
name 微博用户名
nick 微博昵称
openid 微博用户的openid
inFailHandler(inLoginError)Function
默认值:无

用户登录授权失败后要执行的函数。

inLoginErrorMap
回调数据

包含的用户登录失败信息。

message 失败原因描述,一般是拒绝授权

§

logoutT.logout(inHandler)
登出用户,清除用户授权信息。

inHandlerFunction
默认值:无

用户登出后要执行的函数。

§

loginStatusT.loginStatus()
获取用户登录信息,如用户已登录返回包含access_token的Map对象,如未登录返回undefined。

§

apiT.api(inName, inParamMap, inDataType, inType, inOverride)
调用腾讯微博API[链],返回Defer对象[链]


<script>
    T.api("/user/info")
     .success(function (response){
          alert(response.nick);
      })
     .error(function (code, message) {
          alert(message);
      });
</script>
也支持如下书写方式,连续调用多个独立的API,也可参考T.task方法。

<script>
    T.api("/user/info")
     .success(function (response){
          alert(response.nick);
      })
     .error(function (code, message) {
          alert(message);
      })
     .api("/statuses/home_timeline")
     .success(function (response) {
          alert(response);
      })
     .error(function (code, message) {
      });
</script>
inName必选String
默认值:无

要调用的API名称,如"/t/add"。(暂不支持"/t/add_pic")

inParamMapMap
默认值:无

该API对应的参数列表,如{content:"test",clientip:"123.123.123.123"},参数表中可忽略format字段,该字段由inDataType指定。

inDataTypeString
默认值:"json"

返回的数据格式,"json"或"xml"。

inTypeString
默认值:"get"

请求方法,"get"或"post",建议调用写接口统一用"post"。

inOverrideMap
默认值:无

覆盖当前使用的appkey和accessToken,此选项使T.api接口可以独立使用。

appkey 使用此appkey发出api请求
accesstoken 使用此accesstoken发出api请求。
openid 使用此openid发出api请求。

§

tokenReadyT.tokenReady(inHandler)
注册回调函数,inHandler在用户登录态确定后执行。


<script>
    T.tokenReady(function () {
        if (T.loginStatus()) {
            alert("已登录");
        } else {
            alert("未登录");
        }
    });
</script>
inHandlerFunction
默认值:无

用户登录态确定后要执行的函数。

§

documentReadyT.documentReady(inHandler)
注册回调函数,inHandler在DOM树可用后执行。


<script>
    T.documentReady(function () {
        var div = document.createElement("div");
        div.innerHTML = "DOM ready";
        document.body.appendChild(div);
    });
</script>
inHandlerFunction
默认值:无

DOM树可用后要执行的函数。

§

readyT.ready(inHandler)
注册回调函数,inHandler在tokenReadydocumentReady后执行。


<script>
    T.ready(function () {
        var stat = T.loginStatus(),
            bar = document.createElement('div'),
            str;
    
        if (stat) {
            str = '欢迎' + stat.nick;
        } else {
            str = '未登录';
        }
    
        bar.innerHTML = str;
        document.body.appendChild(bar);
    });
</script>
inHandlerFunction
默认值:无

tokenReadydocumentReady后要执行的函数。

§

bindT.bind(inEventName, inHandler)
绑定事件inEventName,此事件发生时执行inHandler


<script>
    T.bind("ready",function () {
        alert("ready");
    });
</script>
inEventName必选String
默认值:无

事件名称,可为OpenJS的事件(下表),也可自定义。

UserLoggedIn 用户授权后触发,参考T.login
UserLoginFailed 用户拒绝授权后触发,参考T.login
UserLoggedOut 登出后触发,参考T.logout
tokenReady token准备完毕后触发,参考T.tokenReady
documentReady DOM树可用后触发,参考T.documentReady
ready token准备完毕并且DOM树可用后触发,参考T.ready
inHandler(inEventData*)必选Function
默认值:无

事件发生时要执行的函数

inEventDataMixed
事件数据,参考T.trigger

§

unbindT.unbind(inEventName, inHandler)
解除事件绑定inEventName,返回布尔值,表示解除绑定是否成功。

inEventName必选String
默认值:无

事件名称,可为OpenJS的事件,也可自定义。

inHandler必选Function
默认值:无

要解除绑定的函数。

§

triggerT.trigger(inEventName, inEventData*)
手动触发事件inEventName,返回数组,包含回调函数执行后的系列返回值。


<script>
    T.bind("myEvent",function (myEventData) {
        alert(myEventData);
    });
    T.trigger("myEvent","myData");
</script>
inEventName必选String
默认值:无

自定义的事件名称,如无特殊需要,不建议手动触发OpenJS的事件

inEventDataMixed
默认值:无

事件数据,参考T.bind

§

onceT.once(inEventName, inHandler)
T.bind一样,区别在于inHanlder执行后自动解除绑定。


<script>
    T.once("myEvent",function (myEventData) {
        alert(myEventData);
    });
    T.trigger("myEvent","myEventData1");
    T.trigger("myEvent","myEventData2");
</script>

§

ajaxT.ajax(inAjaxConfig)
AJAX请求,返回Defer对象[链]


<script>
    T.ajax({
        url: "ajaxsample.json"
    }).success(function (response) {
        alert(response);
    }).error(function (code, message) {
        alert(message);
    });
</script>
inAjaxConfig必选Map
默认值:无

AJAX请求配置。

url必选String
默认值:无

请求网址

typeString
默认值:"get"

请求类型,getpost

dataString|Map
默认值:无

请求数据。

dataTypeString
默认值:"json"(数据转换为JSON对象)

返回结果的数据格式,jsonxmltext

cacheBoolean
默认值:false(不允许缓存)

GET类型的HTTP请求会被浏览器缓存。

asyncString
默认值:"async"(异步请求)

请求编程类型asyncsync,异步或同步。

§

jsonpT.jsonp(inJsonpConfig)
JSONP[链]请求,返回Defer对象。[链]


<script>
    T.jsonp({
        url: "jsonpurl"
    }).success(function (response) {
        alert(response);
    }).error(function (code, message) {
        alert(message);
    });
</script>
inJsonpConfig必选Map
默认值:无

jsonp请求配置。

url必选String
默认值:无

请求网址

dataString|Map
默认值:无

附加在url的请求串。

dataTypeString
默认值:"json"(数据转换为JSON对象)

返回结果的数据格式,jsonxmltext

cacheBoolean
默认值:false(不允许缓存)

GET类型的HTTP请求会被浏览器缓存。

charsetString
默认值:"utf-8"

所请求文件编码

§

scriptT.script(inScriptConfig)
异步引入其它script,返回Defer对象[链]


<script>
    T.script({
        url: "http://code.jquery.com/jquery-1.7.2.min.js"
    }).success(function () {
        alert($);
    }).error(function (code, message) {
        alert(message);
    });
</script>
inScriptConfig必选Map
默认值:无

script请求配置。

url必选String
默认值:无

请求网址

dataString|Map
默认值:无

附加在url的请求串。

cacheBoolean
默认值:true(允许缓存)

GET类型的HTTP请求会被浏览器缓存。

charsetString
默认值:"utf-8"

所请求文件编码

§

taskT.task(inDeferred*)
创建任务组,同时完成多项异步任务,这些任务中如果有任一项失败,整个task失败,返回Defer对象[链]


<script>
    T.task(
          T.api("/statuses/home_timeline"),
          T.api("/statuses/public_timeline")
      )
     .success(function (homeData, publicData) {
          alert([homeData[0], publicData[0]]);
      })
     .error(function (code, message) {
          alert(message);
      });
</script>
inDeferred必选Object
默认值:无

返回Defer对象的一个或多个异步请求。

§

findT.find(selector, context, result)
OpenJS集成了jQuery的选择器引擎Sizzle,以帮助开发者进行高效率开发。返回数组,包含匹配到的DOM元素。


<script>
    T.documentReady(function () {
        alert(T.find("ul > li"));
    });
</script>
selector必选String
默认值:无

选择指令。更多选择DOM元素的技巧,请参考Sizzle文档

contextDOMElement
默认值:document

选择指令的上下文环境。

resultArray
默认值:无

结果存储的数组。

§

localStorageT.localStorage
跨浏览器的数据本地存储对象,开发者可以使用此技术提升用户体验。


<script>
    T.localStorage.set("mykey", "mydata");
    alert(T.localStorage.get("mykey"));
</script>
set(key, value, expires)Function

保存数据到本地(请勿保存敏感数据)。

key 键名
value 键值
expires 可选,保存期限(以天为单位),默认7天。
get(key, defaultValue)Function

从本地获取数据。

key 键名
defaultValue 可选,默认的返回值
del(key)Function

从本地删除数据。

key 键名

§

browserT.browser
提供丰富的浏览器信息。


<script>
    if (T.browser.msie && T.browser.version == 6) {
        // 浏览器为IE6
        // do something
    }
</script>
versionString|Number

浏览器的版本信息。若浏览器类型为IE,该值为数字型,为准确的IE版本号。否则为字符串,是从UserAgent[链]字段中提取出的具有参考价值版本号。

engineString

包含检测到的浏览器内核信息。

    if(T.browser.engine == 'webkit') {
        // do something
    } 
    // 等同于
    if(T.browser.webkit) {
        // do something
    }
webkit webkit内核的浏览器,如Chrome,Safari等
opera opera内核,opera浏览器
msie IE系列浏览器
mozilla 如Firefox,Netscape等
unknown 其它内核的浏览器
platformMap

浏览器所在平台侦测。

name 平台名称,如"pc","iPhone","iPad"等
    //判断是否为iPhone
    if (T.browser.platform.name == 'iPhone') {
        //do something
    }
    等同于
    if (T.browser.platform.iPhone) {
        //do something
    }
pc 为true时代表浏览器在PC平台(台式机,笔记本)上运行
mobile 为true时代表浏览器在移动平台(手机,平板)上运行
featureMap

浏览器是否支持某项特性侦测。

cookie 为true时代表支持Cookie
flash 为true时代表支持Flash。
    进一步的,可以通过flash.version获得flash player版本号。通过flash[property]检查flash player的中的某个特性是否被支持。以下代码检测浏览器是否支持flash以及是否支持externalInterface[链]
    if(T.browser.feature.flash) {
        // 浏览器支持flash
        if(T.browser.feature.flash.externalinterface) {
            //flash player支持externalInterface
        }
    } 
userdata 为true时代表支持UserData[链]
postmessage 为true时代表支持postMessage
canvas 为true时代表支持Canvas
webgl 为true时代表支持WebGL
geolocation 为true时代表支持geolocation
websqldatabase 为true时代表支持websqldatabase
indexeddb 为true时代表支持indexedDB
websocket 为true时代表支持WebSocket
localstorage 为true时代表支持localStorage
sessionstorage 为true时代表支持sessionStorage
webworker 为true时代表支持WebWorker
applicationcache 为true时代表支持applicationCache
osMap

操作系统侦测。

    if(T.browser.os.name == 'windows') {
        // do something
    } 
    // 等同于
    if(T.browser.os.windows) {
        // do something
    }
name 操作系统名称,可能的值为"windows","mac","linux","unix","unknown"
viewportMap

浏览器可见区域大小。注意,该值是实时变化的。

width 浏览器窗口可见区域的宽
height 浏览器窗口可见区域的高
rendererModeMap

浏览器进入的渲染模式侦测。

standard 为true时代表浏览器当前的渲染模式为标准
quirks 为true时代表浏览器当前的渲染模式为怪异模式(兼容模式)

§

templateT.template(inTemplateName)
小型js模板引擎[链],返回模板对象,使用此对象可以方便的构造html。


<script>
// 显示一个简单二维表格并隔行换色
var table = T.template("mytable");
table.add('<% for(var i=0,l=data.length; i<l; i++) {  %>')
     .add('<% var name= data[i][0],score=data[i][1],highlight= i%2==0; %>')
     .add('<tr style="background:<%=highlight ? \"red\" : \"green\" %>;">')
     .add('<td><%=name%></td><td><%=score%></td>')
     .add('</tr>')
     .add('<% } %>')
   .wrapTag('tbody','table')
   .data('data',[["张三",90],["李四",85],["王五",80],["柳六",100]]);

T.documentReady(function () {
    document.body.innerHTML = table.render();
});
</script>
inTemplateNameString
默认值:"unknown"

模板名。


模板对象的方法

add(inTplStr)Function

添加模板字符串。

inTplStr 模板字符串
data(inTplData,inOverWrite)Function

添加模板数据。data方法支持多种写法,以下调用方法效果相同。


<script>
    var tp = T.template("mytemplate");
    tp.add('<ol>')
      .add('<li><%=x%></li>')
      .add('<li><%=y%></li>')
      .add('</ol>');

    var result1 = tp.data({"x":1,"y":2}).render();
    tp.reset(false,true);

    var result2 = tp.data(["x",1,"y",2]).render();
    tp.reset(false,true);

    var result3 = tp.data("x",1).data('y',2).render();
    tp.reset(false,true);

    // 采用这种写法必须明确指定inOverWrite
    var result4 = tp.data("x",1,'y',2,true).render();
    tp.reset(false,true);

    alert(result1 && result1 == result2 && result2 == result3 && result3 == result4);
</script>
inTplData 模板数据
inOverWrite 是否覆盖之前的模板数据
wrapTag(inHtmlTag*)Function

快捷方法,把模板字符串头部与尾部附加html标签。

inHtmlTag html标签,如tbody,table,div,iframe等
renderWith(inTplData,inOverWrite)Function

指定模板数据,并输出模板渲染结果,参数及用法与data方法完全一致。

inTplData 模板数据
inOverWrite 是否覆盖之前的模板数据
render()Function

输出模板渲染结果,类型为字符串。

reset(inResetTpl,inResetData)Function

重置模板字符串或重置模板数据。

inResetTpl 是否清空模板字符串
inResetData 是否清空模板数据

静态方法

renderTemplate(inTplStr, inTplData)Function

使用模板数据inTplData渲染模板inTplStr,返回渲染后的模板字符串。

inTplStr 模板
inTplData 模板数据

§

componentT.component(inComponentName)
创建网站连接的腾讯微博组件,返回网站连接组件对象。

inComponentNameString
默认值:无

组件名称,目前支持"微评论","一键转播"。

网站连接组件对象的公有方法

dimension(width,height)Function

设置组件宽,高。

width 组件宽度
height 组件高度
width(width)Function

设置组件宽度。

width 组件宽度
height(height)Function

设置组件高度。

height 组件高度
style(styleName)Function

设置组件样式。

styleName 组件样式名
config(inConfig)Function

其它组件配置。

inConfig 组件配置Map对象
renderInto(context)Function

在网站上渲染网站连接组件。

context 要渲染到的DOM节点或选择符[链],默认使用选择符选中的第一个元素。
render()Function

在网站上渲染网站连接组件,渲染该组件到组件预先指定的id。使用此方法必须预先在页面中放置容器,并设置其id为该组件预先指定的id名称。

例如,js代码 T.component("微评论").render() ,要求您必须在页面上放置一个节点。如,<div id="qqwb_comment__"></div> 否则组件显示不出来。当然您也可以使用 renderInto 方法,明确指定一个节点。

组件与节点id对照表如下:

微评论     qqwb_comment__
一键转播 qqwb_share__

componentT.component("微评论")
创建微评论组件,返回微评论组件对象。


<script>
    T.component("微评论").appkey('801126062').renderInto("body");
</script>
appkey(inAppkey)Function

设置微评论组件的Appkey。

inAppkey 微评论组件的Appkey,如801126062
colors(colors*)Function

自定义微评论组件的外观。

colors 微评论组件颜色设置,如blue,green,#06c等。最多4个,依次代表背景色,评论背景色,边框色,主字色

componentT.component("一键转播")
创建一键转播组件,返回一键转播组件对象。


<script>
    T.component("一键转播").appkey(801194240).icon(1).showCounter('top').renderInto('body');
</script>
appkey(inAppkey)Function

设置一键转播组件的Appkey。

inAppkey 一键转播组件的Appkey,如801126062
icon(inIcon)Number|String

定义一键转播组件所使用的按钮。

inIcon 一键转播组件按钮外观,此参数可以为数字或字符串。若为数字,代表使用内置的转播按钮样式,有效的值为0,1,2,分别代表三种不同样式的转播按钮。其中0,1支持转播次数的显示,2不支持。若为字符串,则应该为转播图片的网址,不支持显示转播次数。
showCounter(inPosition)String

设置转播次数显示的位置。

inPosition 转播次数的显示位置,接受的值为"left"或者"top",且icon必须为0或1。

widgetT.widget("账号连接")
创建账号连接插件,使用腾讯微博帐号登录和退出。


<script>
    T.init({appkey:801254628});
    T.widget("账号连接", {src : 'http://mat1.gtimg.com/app/openjs/widget/static/connect/images/50btn.png', head : 1}).show('qq_account_log');
</script>
init(appkey)Object

初始化Openjs。请先加载open.js后加载connect.js。

appkey 应用网址对应的appkey,如open.t.qq.com对应的appkey:801254628
widget(name, opt)String|Object

调用widget,参数是插件的名字,定制的参数。

name 插件名字
opt 参数,src属性【非必须属性】用户自定义登录按钮logo,属性值为图片url。head属性【非必须属性】定制用户登录后展现方式。head : 0不展示头像或者logo。head : 1展示用户头像。head : 2展示腾讯微博logo。
show(elementId)String

设置登录按钮DOM结构插入的元素Id。

elementId DOM节点的id

widgetT.widget("好友选择")
创建好友选择插件,便捷选择所需好友,确定后返回所选用户的信息。


<script>
    T.init({appkey:801254628});
    T.widget("好友选择")
    .onError(function (message) {
        alert('错误' + JSON.stringify(message));
    }).onSuccess(function (data) {
        alert(JSON.stringify(data));
    }).show();
</script>
init(appkey)Object

初始化Openjs。请先加载open.js后加载friend_selector.js。

appkey 应用网址对应的appkey,如open.t.qq.com对应的appkey:801254628
widget(name)String

调用widget,参数是组件的名字。

name 需要调用插件的名字
onError(function)Function

返回错误处理

message 返回的错误信息
onSuccess(function)Function

返回成功处理

message 返回的成功选择的结果
show(elementId)String

插件嵌入指定Id元素内部

elementId 参数为空则显示在腾讯微博的外框浮层内,否则显示在您指定的DOM结构内部

应用案例

收听按钮

历史更新

版本: 3.02012.8
  • 授权流程微博开放平台标准的 OAuth2.0 协议,可靠性高,兼容性强。
  • 与微博API服务器数据交互采用 HTTPS 加密,更加安全。
  • 加强对手机应用的支持。
  • 取消对synclogin的支持。
  • 进一步加强接口的稳定性和兼容性。
版本: 2.0推荐使用2012.4
版本: 1.52012.1
  • 由于某些接口不需要鉴权,如public_timeline,因此移除了T.api接口的登录态检查。若T.api如出现鉴权错误,请调用 T.loginStatus 检查登录态是否正常。
  • 修复IE6,7下使用flash方案跨域数据乱序的错误。
版本: 1.02011.10

初始版本

常见问题

  1. 我在使用过程中遇到问题应该如何解决?
    请首先查阅 接口常见问题。如果仍未解决,可以加入OpenJS专属QQ群 221677647。如果你认为遇到了bug或是浏览器兼容性问题,可以在 问题跟踪系统 中提交你的问题,我们的开发人员会尽快跟踪处理。注意,问题提交时,请务必注明浏览器类型和版本,以便快速定位问题,如果您不知道自己的浏览器类型和版本,可以打开 浏览器检测页面,把检测结果复制给我们即可。
  2. 我怀疑遇到了bug,应该怎么调试?
    对于自带javascript控制台的浏览器,如(IE8,IE9,Firefox,Chrome),开发者可以在 环境变量 中设置debug为yes即可以在控制台中看到调试信息。对于不带控制台的浏览器(如IE6,腾讯TT,搜狗浏览器等),可以拖拽 openjs调试信息输出工具 到收藏栏,点击运行后即可看到相应的调试信息。
  3. check sign error?
    check sign error是调用api时最常见的一个错误,造成这个错误的原因是被调用的接口需要鉴权,而当前没有获得用户授权,T.loginStatus() 返回undefined。要解决这个问题,请首先查阅 API文档 确定被调用接口是否需要鉴权。

    若接口不需要鉴权而出现了鉴权错误,请检查传入的appkey是否正确,若appkey不正确也会产生此错误。

    若接口要求鉴权,而T.loginStatus()返回undefined,可以考虑使用 T.login() 获得用户授权后再调用接口,或调用 T.api 时声明accesstoken。

  4. OpenJS与fusion api有什么关系?它与其它js库兼容吗?
    OpenJS 和 Fusion api 没有关系,它们都是独立的js库。OpenJS可以与现有的js库或框架兼容,它会在使用者的网站上声明 QQWBT 两个全局变量,它在运行过程中也会产生少量的带有特殊前缀的临时全局变量,不会影响其它js代码的执行。
  5. OpenJS是如何实现跨域数据提交的?
    对于支持 postMessage 的浏览器,我们优先使用此方法,在其余浏览器我们采用flash提供的跨域机制完成数据传输(flashplayer要求支持ExternalInterface),要查看浏览器是否支持这两种技术,请访问此页面
  6. 用OpenJS开发的应用非嵌入的时候正常,用iframe嵌入到其它页面就不正常了,是不是OpenJS不支持iframe?
    OpenJS自带的鉴权机制会利用cookie保存用户的授权信息,当您的应用嵌入到另外一个页面时,就会遇到 第三方cookie 的问题,简单来说就是被嵌入非同源的页面无法读取或写入cookie。开发者只需要按照 这篇教程 在程序中输出 p3p header 即可。一般情况下,在腾讯微博应用频道上线的应用都是以iframe嵌入的,会遇到这个问题。
  7. 用户授权了应用,这个授权可以持续多久有效?
    使用OpenJS自带的授权机制进行授权,用户的授权信息会保存cookie里,如果用户不主动清除cookie并且 T.logout() 没有被调用(实际上也是清除cookie),授权是一直有效的,否则的话用户需要重新授权。
  8. 授权出错,redirect_uri与注册的应用网址不匹配?
    oauth2.0协议对外暴露了appid,为防止有人冒用其它人的appid让用户授权,非法获得用户的信任。我们要求授权后页面回跳的地址必须是该appid拥有者所指定的地址(应用网址),否则便阻止用户授权。

    这可能会给开发者应用开发过程中的调试带来不便,我们建议在开发过程中采用配置HOSTS文件改变域名到IP映射的办法解决这个问题,或者也可以在开发阶段采用ip地址作为网址,应用提交审核或正式上线时再切换到域名。

  9. 弹出的授权窗口为什么不能自动关闭?
    首先,请确保 T.init 不是 autoclose 为false,如果autoclose为false,则代表授权窗口不会被自动关闭。其次,请检查callbackurl是否与调用页同域,通常这种情况是由于应用页面设置了 document.domain 属性而引起的,callbackurl 所指定的页面的 document.domain 属性必须于父页面保持一致,授权信息才能被获取到,授权窗口才能被自动关闭。默认情况下callbackurl为调用页的网址,不会出现此问题。
    另,所谓同域是指网址的协议相同,端口相同,以及域名相同。据开发者反馈,这里最常见的一个错误是应用网址是 http://example.com/app.htm而callbackurl为 http://www.example.com/callback.htm,开发者往往误认为 example.comwww.example.com 同域,但对于浏览器来说,他们不是同域的。
  10. 什么是腾讯域内应用?
    腾讯域内应用,是指应用网址以qq.com结尾的应用,简称域内应用。
    OpenJS同时支持腾讯域内应用与域外应用的开发,两者的区别是授权画面不一样,域内应用采用浮层式的体验,域外应用采用弹窗的体验。

    注意,使用OpenJS开发的域内应用document.domainqq.com

    OpenJS完美支持域内应用与域外应用互相迁移,意味者开发者无需更改任何代码即可把域外的应用迁移到域内使用,反之亦可。
  11. 弹窗授权被浏览器拦截了怎么办?
    浏览器不会拦截用户点击触发的弹窗,因此开发者只需把 T.login 放置在用户的点击事件中触发即可。例如:
    
    $("#someid").click(function () {
        T.login();
    });
    
  12. 在chrome调试工具下报 "Unsafe Javascript attempt to access frame with URL ..." 的错误?
    OpenJS会主动探测自身所处的环境,因此会触发浏览器的沙箱安全规则,当有脚本试图访问沙箱以外的数据时,浏览器就会给出这个提示,实际上执行过程中并没有发生错误。

成功案例

开心网腾讯Q+你的应用