OpenJS (2.0) 开始使用 环境变量 接口 历史更新 常见问题 新 成功案例

OpenJS

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应用)可以指定该参数。

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:800000006
    });
</script>
inInitOpts必选Map
appkey必选String
默认值:无

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

callbackurlString
默认值:当前页面网址

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

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: 800000006,
        samewindow: true,
        callbackurl:["path_to_callbackurl?"
                    ,'return_to=','your_app_url'
                    ,'&appkey=',your_appkey].join("")
    })
</script>
syncloginBoolean
默认值:false

默认为不使用QQ登录态授权。若该项为真,当T.login被调用时,首先尝试使用QQ登录态授权当前应用,如失败则弹新窗口授权)。

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

向服务器发送技术报告,帮助我们更好的完善OpenJS。


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

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

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

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

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

callbackurlString
默认值:当前页面网址

用户授权成功后的回跳页面地址,如不设置则为当前页面网址。回跳页面地址必须与appkey匹配[链],否则无法完成授权。

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

默认自动关闭授权窗口,否则需开发者自行关闭回跳页面窗口。

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

默认为弹新窗口授权,否则在同一窗口授权,在此情况下开发者须自己处理授权返回的token,或使用我们提供的通用方案[链]。开发者无须担心弹出的授权窗口被浏览器屏蔽,因为授权行为一般是由用户主动点击触发,浏览器不会进行屏蔽。

syncloginBoolean
默认值:false

默认为不使用QQ登录态授权。若该项为真,当T.login被调用时,首先尝试使用QQ登录态授权当前应用,如失败则弹新窗口授权)。

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

向服务器发送技术报告,帮助我们更好的完善OpenJS。

§

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 微博昵称
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请求。

§

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)
创建网站连接的腾讯微博组件,返回网站连接组件对象。


<script>
    T.component("微评论").appkey('801126062').renderInto("body");
</script>
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。


微评论组件的私有方法

appkey(inAppkey)Function

设置微评论组件的Appkey。

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

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

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

历史更新

版本: 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. check sign error?
    check sign error是调用api时最常见的一个错误,造成这个错误的原因是被调用的接口需要鉴权,而当前没有获得用户授权,T.loginStatus() 返回undefined。要解决这个问题,请首先查阅 API文档 确定被调用接口是否需要鉴权。

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

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

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

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

  8. 什么是腾讯域内应用?
    腾讯域内应用,是指应用网址以qq.com结尾的应用,简称域内应用。
    OpenJS同时支持腾讯域内应用与域外应用的开发,两者的区别是授权画面不一样,域内应用采用浮层式的体验,域外应用采用弹窗的体验。

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

    OpenJS完美支持域内应用与域外应用互相迁移,意味者开发者无需更改任何代码即可把域外的应用迁移到域内使用,反之亦可。

成功案例

开心网腾讯Q+你的应用