SCRIPT70:权限被拒绝在IE9 API错误191 [英] SCRIPT70: Permission denied on IE9 api error 191
问题描述
我得到一个错误SCRIPT70 IE9上做 FB.login(功能(响应){})
之后,我不使用iframe的这个脚本。我在得到一个错误:
在弹出给我一个
API错误code:191
API错误描述:指定的URL不属于应用程序
错误消息:无效REDIRECT_URI:给定的URL不是由应用程序配置允许
all.js的,行22字4250
错误发生在setLoadedNode功能
其中包含:
块引用>FB.provide('',{
用户界面:功能(F,B){
如果(!f.method){
FB.log(办法是FB.ui()必需的参数。');
返回null;
}
如果((f.method =='permissions.request'|| f.method =='permissions.oauth)及及(f.display =='iframe的'|| f.display =='对话') ){
VAR H;
VAR我;
如果(FB._oauth){
H = f.scope;
I = h.split(/ \\ s |,/ G);
}其他{
H = f.perms;
I = h.split(,);
}
对于(VAR E = 0; e控制i.length,E ++){
变种G = FB.String.trim(我[E]);
如果(G&安培;&安培;!FB.initSitevars.iframePermissions [G]){
f.display ='弹出';
打破;
}
}
}
VAR一个= FB.UIServer prepareCall(F,B)。
如果返回NULL(一!);
变种D = a.params.display;
如果(D ==='对话'){
D ='IFRAME';
}否则如果(D ==='无'),D ='隐藏';
变种C = FB.UIServer [D];
如果(!C){
FB.log('显示器必须是弹出,一个+对话,IFRAME,摸,异步,隐藏或无');
返回null;
}
C(一);
返回a.dialog;
}
});
FB.provide('UIServer',{
方法: {},
_loadedNodes:{},
_defaultCb:{},
_resultToken:'xxRESULTTOKENxx',
_forceHTTPS:假的,
genericTransform:功能(一){
如果(a.params.display =='对话'|| a.params.display =='的iframe'){
a.params.display ='IFRAME';
a.params.channel = FB.UIServer._xdChannelHandler(a.id,'parent.parent');
}
返回;
},
prepareCall:功能(H,B){
变种G = h.method.toLowerCase()
F = FB.copy({},FB.UIServer.Methods并[g]),
E = FB.guid()
C =(f.noHttps ==真!)及和放大器; (FB._https ||(G =='auth.status'和;!&安培;!G ='login.status'));
FB.UIServer._forceHTTPS = C;
FB.copy(h时,{
API_KEY:FB._apiKey,
APP_ID:FB._apiKey,
区域:FB._locale,
SDK:乔伊,
的access_token:C&功放;&安培; FB.getAccessToken()||未定义
});
h.display = FB.UIServer.getDisplayMode(F,H);
如果(!使用f.url)=使用f.url对话框/+克;
VAR A = {
CB:B,
ID:E,
大小:f.size || FB.UIServer.getDefaultSize(),
网址:FB.getDomain(?C'https_www':'WWW')使用f.url +,
forceHTTPS:C,
params:一个小时,
名称:克,
对话:新FB.Dialog(五)
};
变种J = f.transform? f.transform:FB.UIServer.genericTransform;
如果(J){
一个= j的(一);
如果(一个!)回报;
}
变种D = f.getXdRelation || FB.UIServer.getXdRelation;
VAR我= D(a.params);
如果((在FB.UIServer._defaultCb a.id)及!&安培;!(在a.params'下一步'))a.params.next = FB.UIServer._xdResult(a.cb,a.id,我,真正的);
如果(我===父)a.params.channel_url = FB.UIServer._xdChannelHandler(即'parent.parent');
。一个= FB.UIServer prepareParams(一);
返回;
},
prepareParams:函数(){
变种C = a.params.method;
如果删除a.params.method(FB.Canvas.isTabIframe()!);
如果(FB.TemplateUI&安培;&安培; FB.TemplateUI.supportsTemplate(C,A)){
如果(FB.reportTemplates)的console.log(+ C +为模板的使用,);
FB.TemplateUI.useCachedUI(C,A);
}其他{
a.params = FB.JSON.flatten(a.params);
变种B = FB.QS.en code(a.params);
如果(FB.UIServer.urlTooLongForIE(a.url + B)){
a.post = TRUE;
}否则如果(B)a.url + ='?' + B;
}
返回;
},
urlTooLongForIE:功能(一){
返回则为a.length> 2000;
},
getDisplayMode:功能(A,B){
如果(b.display ==='隐藏'|| b.display ==='无')的返回b.display;
如果(FB.Canvas.isTabIframe()及和放大器; b.display =='弹出'!)回报异步;
如果(FB.UA.mobile()|| b.display ==='触摸')返回'触摸';
如果(FB.getAccessToken()及!&安培; b.display =='对话'和;&安培;!a.loggedOutIframe){
('当用户连接只能用对话模式。')FB.log;
返回'弹出';
}
如果(a.connectDisplay&安培;&安培;!FB._inCanvas)返回a.connectDisplay;
返回b.display || (FB.getAccessToken()'对话':'弹出'?);
},
getXdRelation:功能(B){
VAR一个= b.display;
如果(一个==='弹出'||一个==='触摸')返回'开门红';
如果(一个==='对话'||一个===IFRAME'|| ===一个隐藏||一个==='无')返回父;
如果(一个===异步)返回parent.frames ['+ window.name +']';
},
弹出:功能(B){
VAR一个= typeof运算window.screenX!=未定义? window.screenX:window.screenLeft,
I = typeof运算window.screenY!=未定义? window.screenY:window.screenTop,
G = typeof运算window.outerWidth!=未定义? window.outerWidth:document.documentElement.clientWidth,
F = typeof运算window.outerHeight!=未定义? window.outerHeight:(document.documentElement.clientHeight - 22)
K = FB.UA.mobile()?空:b.size.width,
D = FB.UA.mobile()?空:b.size.height,
H =(A&小于0)? window.screen.width +一:一,
E = parseInt函数(H +((G - K)/ 2),10)
J = parseInt函数(1 +((F - D)/ 2.5),10)
C = [];
如果(K == NULL!)c.push('宽='+ K);
如果(D!== NULL)c.push('高度='+ D);
c.push(左='+ E);
c.push('顶='+ J);
c.push('滚动= 1');
如果(b.name =='permissions.request'|| b.name =='permissions.oauth')c.push('位置= 1,工具栏= 0');
C = c.join(,);
如果(b.post){
FB.UIServer.setLoadedNode(B,window.open('关于:空白',b.id,C));
FB.Content.submitToTarget({
网址:b.url,
目标:b.id,
params:一个b.params
});
}其他FB.UIServer.setLoadedNode(B,window.open(b.url,b.id,C));
如果(在FB.UIServer._defaultCb b.id)FB.UIServer._popupMonitor();
},
setLoadedNode:功能(A,B){
FB.UIServer._loadedNodes [a.id] = B;
如果(a.params)b.fbCallID = a.id;
},
getLoadedNode:功能(一){
返回FB.UIServer._loadedNodes [a.id]
},
隐藏:函数(){
a.className ='FB_UI_Hidden';
a.root = FB.Content.appendHidden('');
FB.UIServer._insertIframe(一);
},
IFRAME:函数(){
a.className ='FB_UI_Dialog';
变种B =功能(){
FB.UIServer._triggerDefault(a.id);
};
a.root = FB.Dialog.create({
OnClose中:B,
closeIcon:真实,
类:(FB.UA.iPad()'中心'?'')
});
如果(a.hideLoader!)FB.Dialog.showLoader(B,a.size.width);
FB.Dom.addCss(a.root,'fb_dialog_iframe');
FB.UIServer._insertIframe(一);
},
异步:函数(){
a.frame = window.name;
删除a.url;
删除a.size;
FB.Arbiter.inform('的ShowDialog',一);
},
getDefaultSize:功能(){
如果(FB.UA.mobile())如果(FB.UA.iPad()){
返回{
宽度:500,
身高:590
};
}其他{
VAR一个= window.innerWidth / window.innerHeight> 1.2;
返回{
宽度:window.innerWidth,
高度:(?window.innerHeight,(一screen.width:screen.height))Math.max
};
}
返回{
宽度:575,
身高:240
};
},
_insertIframe:功能(B){
FB.UIServer._loadedNodes [b.id] = FALSE;
风险价值=功能(C){
如果(在FB.UIServer._loadedNodes b.id)FB.UIServer.setLoadedNode(B,C);
};
如果(b.post){
FB.Content.insertIframe({
网址:关于:空白,
根:b.root,
产品类别:b.className,
宽度:b.size.width,
高度:b.size.height,
ID:b.id,
onInsert:一,
onload事件:功能(C){
FB.Content.submitToTarget({
网址:b.url,
目标:c.name,
params:一个b.params
});
}
});
}其他FB.Content.insertIframe({
网址:b.url,
根:b.root,
产品类别:b.className,
宽度:b.size.width,
高度:b.size.height,
ID:b.id,
名称:b.frameName,
onInsert:一
});
},
_handleResizeMessage:功能(B,A){
变种C = FB.UIServer._loadedNodes [B]。
如果(a.height)c.style.height = a.height +'像素';
如果(a.width)c.style.width = a.width +'像素';
FB.Arbiter.inform('resize.ack',一个|| {},parent.frames ['+ c.name +']',真);
如果FB.Dialog.show(三)(FB.Dialog.isActive(三)!);
},
_triggerDefault:功能(一){
FB.UIServer._xdRecv({
框架:一
},FB.UIServer._defaultCb [A] ||
功能(){});
},
_popupMonitor:功能(){
风险价值;
对(在FB.UIServer._loadedNodes变种b)如(FB.UIServer._loadedNodes.hasOwnProperty(二)及;和b在FB.UIServer._defaultCb){
变种C = FB.UIServer._loadedNodes [B]。
尝试{
如果(c.tagName)继续;
}赶上(D){}
尝试{
如果(c.closed){
FB.UIServer._triggerDefault(二);
}否则一= TRUE;
}赶上(E){}
}
如果(一个或放大器;&放大器;!FB.UIServer._popupInterval){
FB.UIServer._popupInterval = window.setInterval(FB.UIServer._popupMonitor,100);
}否则如果(A和!&放大器; FB.UIServer._popupInterval){
window.clearInterval(FB.UIServer._popupInterval);
FB.UIServer._popupInterval = NULL;
}
},
_xdChannelHandler:功能(B,C){
变种一个=(FB.UIServer._forceHTTPS&放大器;&放大器; FB.UA.ie()== 7!);
返回FB.XD.handler(功能(D){
变种E = FB.UIServer._loadedNodes [B]。
如果(E!)回报;
如果(d.type =='调整'){
FB.UIServer._handleResizeMessage(B,D);
}否则如果(d.type =='隐藏'){
FB.Dialog.hide(E);
}否则如果(d.type =='呈现'){
变种F = FB.Dialog._findRoot(E);
FB.Dialog.show(F);
}否则如果(d.type =='fireevent')FB.Event.fire(d.event);
},C,真实,空,一);
},
_xdNextHandler:功能(A,B,D,C){
如果(C)FB.UIServer._defaultCb并[b] =一个;
返回FB.XD.handler(函数(五){
FB.UIServer._xdRecv(E,A);
},D)+'&放大器;帧='+ B;
},
_xdRecv:功能(B,A){
变种C = FB.UIServer._loadedNodes [b.frame]
尝试{
如果(FB.Dom.containsCss(三,'FB_UI_Hidden')){
window.setTimeout(函数(){
c.parentNode.parentNode.removeChild(c.parentNode);
},3000);
}否则如果(FB.Dom.containsCss(三,'FB_UI_Dialog')){
FB.Dialog.remove(C);
如果(FB.TemplateUI&放大器;&放大器; FB.UA.mobile())FB.TemplateUI.populateCache();
}
}赶上(D){}
尝试{
如果(c.close){
c.close();
FB.UIServer._popupCount--;
}
}赶上(E){}
删除FB.UIServer._loadedNodes [b.frame]
删除FB.UIServer._defaultCb [b.frame]
一(二);
},
_xdResult:功能(A,B,D,C){
回报(FB.UIServer._xdNextHandler(函数(五){
一个与放大器;&放大器;一个(e.result&放大器;&放大器;!e.result = FB.UIServer._resultToken&放大器;&放大器; FB.JSON.parse(e.result));
},B,D,C)+'&放大器;结果='+ EN codeURIComponent(FB.UIServer._resultToken));
}
});我增加了整条生产线22美化
有没有人有这个问题?感谢您
解决方案看来当前的URL路径必须是画布URL下你在你的Facebook应用程序设置中设置了身份验证对话框工作。
这是奇怪的,因为像小部件将工作正常的任何地方!
I get an SCRIPT70 error on IE9 after doing
FB.login(function(response){})
and I don't use iframes for this script. I get an error at:the popup give me an
API Error Code: 191 API Error Description: The specified URL is not owned by the application Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.
all.js, line 22 character 4250 the error happens at the setLoadedNode function which contains:
FB.provide('', { ui: function (f, b) { if (!f.method) { FB.log('"method" is a required parameter for FB.ui().'); return null; } if ((f.method == 'permissions.request' || f.method == 'permissions.oauth') && (f.display == 'iframe' || f.display == 'dialog')) { var h; var i; if (FB._oauth) { h = f.scope; i = h.split(/\s|,/g); } else { h = f.perms; i = h.split(','); } for (var e = 0; e < i.length; e++) { var g = FB.String.trim(i[e]); if (g && !FB.initSitevars.iframePermissions[g]) { f.display = 'popup'; break; } } } var a = FB.UIServer.prepareCall(f, b); if (!a) return null; var d = a.params.display; if (d === 'dialog') { d = 'iframe'; } else if (d === 'none') d = 'hidden'; var c = FB.UIServer[d]; if (!c) { FB.log('"display" must be one of "popup", ' + '"dialog", "iframe", "touch", "async", "hidden", or "none"'); return null; } c(a); return a.dialog; } }); FB.provide('UIServer', { Methods: {}, _loadedNodes: {}, _defaultCb: {}, _resultToken: '"xxRESULTTOKENxx"', _forceHTTPS: false, genericTransform: function (a) { if (a.params.display == 'dialog' || a.params.display == 'iframe') { a.params.display = 'iframe'; a.params.channel = FB.UIServer._xdChannelHandler(a.id, 'parent.parent'); } return a; }, prepareCall: function (h, b) { var g = h.method.toLowerCase(), f = FB.copy({}, FB.UIServer.Methods[g]), e = FB.guid(), c = (f.noHttps !== true) && (FB._https || (g !== 'auth.status' && g != 'login.status')); FB.UIServer._forceHTTPS = c; FB.copy(h, { api_key: FB._apiKey, app_id: FB._apiKey, locale: FB._locale, sdk: 'joey', access_token: c && FB.getAccessToken() || undefined }); h.display = FB.UIServer.getDisplayMode(f, h); if (!f.url) f.url = 'dialog/' + g; var a = { cb: b, id: e, size: f.size || FB.UIServer.getDefaultSize(), url: FB.getDomain(c ? 'https_www' : 'www') + f.url, forceHTTPS: c, params: h, name: g, dialog: new FB.Dialog(e) }; var j = f.transform ? f.transform : FB.UIServer.genericTransform; if (j) { a = j(a); if (!a) return; } var d = f.getXdRelation || FB.UIServer.getXdRelation; var i = d(a.params); if (!(a.id in FB.UIServer._defaultCb) && !('next' in a.params)) a.params.next = FB.UIServer._xdResult(a.cb, a.id, i, true); if (i === 'parent') a.params.channel_url = FB.UIServer._xdChannelHandler(e, 'parent.parent'); a = FB.UIServer.prepareParams(a); return a; }, prepareParams: function (a) { var c = a.params.method; if (!FB.Canvas.isTabIframe()) delete a.params.method; if (FB.TemplateUI && FB.TemplateUI.supportsTemplate(c, a)) { if (FB.reportTemplates) console.log("Using template for " + c + "."); FB.TemplateUI.useCachedUI(c, a); } else { a.params = FB.JSON.flatten(a.params); var b = FB.QS.encode(a.params); if (FB.UIServer.urlTooLongForIE(a.url + b)) { a.post = true; } else if (b) a.url += '?' + b; } return a; }, urlTooLongForIE: function (a) { return a.length > 2000; }, getDisplayMode: function (a, b) { if (b.display === 'hidden' || b.display === 'none') return b.display; if (FB.Canvas.isTabIframe() && b.display !== 'popup') return 'async'; if (FB.UA.mobile() || b.display === 'touch') return 'touch'; if (!FB.getAccessToken() && b.display == 'dialog' && !a.loggedOutIframe) { FB.log('"dialog" mode can only be used when the user is connected.'); return 'popup'; } if (a.connectDisplay && !FB._inCanvas) return a.connectDisplay; return b.display || (FB.getAccessToken() ? 'dialog' : 'popup'); }, getXdRelation: function (b) { var a = b.display; if (a === 'popup' || a === 'touch') return 'opener'; if (a === 'dialog' || a === 'iframe' || a === 'hidden' || a === 'none') return 'parent'; if (a === 'async') return 'parent.frames[' + window.name + ']'; }, popup: function (b) { var a = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft, i = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop, g = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.documentElement.clientWidth, f = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.documentElement.clientHeight - 22), k = FB.UA.mobile() ? null : b.size.width, d = FB.UA.mobile() ? null : b.size.height, h = (a < 0) ? window.screen.width + a : a, e = parseInt(h + ((g - k) / 2), 10), j = parseInt(i + ((f - d) / 2.5), 10), c = []; if (k !== null) c.push('width=' + k); if (d !== null) c.push('height=' + d); c.push('left=' + e); c.push('top=' + j); c.push('scrollbars=1'); if (b.name == 'permissions.request' || b.name == 'permissions.oauth') c.push('location=1,toolbar=0'); c = c.join(','); if (b.post) { FB.UIServer.setLoadedNode(b, window.open('about:blank', b.id, c)); FB.Content.submitToTarget({ url: b.url, target: b.id, params: b.params }); } else FB.UIServer.setLoadedNode(b, window.open(b.url, b.id, c)); if (b.id in FB.UIServer._defaultCb) FB.UIServer._popupMonitor(); }, setLoadedNode: function (a, b) { FB.UIServer._loadedNodes[a.id] = b; if (a.params) b.fbCallID = a.id; }, getLoadedNode: function (a) { return FB.UIServer._loadedNodes[a.id]; }, hidden: function (a) { a.className = 'FB_UI_Hidden'; a.root = FB.Content.appendHidden(''); FB.UIServer._insertIframe(a); }, iframe: function (a) { a.className = 'FB_UI_Dialog'; var b = function () { FB.UIServer._triggerDefault(a.id); }; a.root = FB.Dialog.create({ onClose: b, closeIcon: true, classes: (FB.UA.iPad() ? 'centered' : '') }); if (!a.hideLoader) FB.Dialog.showLoader(b, a.size.width); FB.Dom.addCss(a.root, 'fb_dialog_iframe'); FB.UIServer._insertIframe(a); }, async: function (a) { a.frame = window.name; delete a.url; delete a.size; FB.Arbiter.inform('showDialog', a); }, getDefaultSize: function () { if (FB.UA.mobile()) if (FB.UA.iPad()) { return { width: 500, height: 590 }; } else { var a = window.innerWidth / window.innerHeight > 1.2; return { width: window.innerWidth, height: Math.max(window.innerHeight, (a ? screen.width : screen.height)) }; } return { width: 575, height: 240 }; }, _insertIframe: function (b) { FB.UIServer._loadedNodes[b.id] = false; var a = function (c) { if (b.id in FB.UIServer._loadedNodes) FB.UIServer.setLoadedNode(b, c); }; if (b.post) { FB.Content.insertIframe({ url: 'about:blank', root: b.root, className: b.className, width: b.size.width, height: b.size.height, id: b.id, onInsert: a, onload: function (c) { FB.Content.submitToTarget({ url: b.url, target: c.name, params: b.params }); } }); } else FB.Content.insertIframe({ url: b.url, root: b.root, className: b.className, width: b.size.width, height: b.size.height, id: b.id, name: b.frameName, onInsert: a }); }, _handleResizeMessage: function (b, a) { var c = FB.UIServer._loadedNodes[b]; if (a.height) c.style.height = a.height + 'px'; if (a.width) c.style.width = a.width + 'px'; FB.Arbiter.inform('resize.ack', a || {}, 'parent.frames[' + c.name + ']', true); if (!FB.Dialog.isActive(c)) FB.Dialog.show(c); }, _triggerDefault: function (a) { FB.UIServer._xdRecv({ frame: a }, FB.UIServer._defaultCb[a] || function () {}); }, _popupMonitor: function () { var a; for (var b in FB.UIServer._loadedNodes) if (FB.UIServer._loadedNodes.hasOwnProperty(b) && b in FB.UIServer._defaultCb) { var c = FB.UIServer._loadedNodes[b]; try { if (c.tagName) continue; } catch (d) {} try { if (c.closed) { FB.UIServer._triggerDefault(b); } else a = true; } catch (e) {} } if (a && !FB.UIServer._popupInterval) { FB.UIServer._popupInterval = window.setInterval(FB.UIServer._popupMonitor, 100); } else if (!a && FB.UIServer._popupInterval) { window.clearInterval(FB.UIServer._popupInterval); FB.UIServer._popupInterval = null; } }, _xdChannelHandler: function (b, c) { var a = (FB.UIServer._forceHTTPS && FB.UA.ie() !== 7); return FB.XD.handler(function (d) { var e = FB.UIServer._loadedNodes[b]; if (!e) return; if (d.type == 'resize') { FB.UIServer._handleResizeMessage(b, d); } else if (d.type == 'hide') { FB.Dialog.hide(e); } else if (d.type == 'rendered') { var f = FB.Dialog._findRoot(e); FB.Dialog.show(f); } else if (d.type == 'fireevent') FB.Event.fire(d.event); }, c, true, null, a); }, _xdNextHandler: function (a, b, d, c) { if (c) FB.UIServer._defaultCb[b] = a; return FB.XD.handler(function (e) { FB.UIServer._xdRecv(e, a); }, d) + '&frame=' + b; }, _xdRecv: function (b, a) { var c = FB.UIServer._loadedNodes[b.frame]; try { if (FB.Dom.containsCss(c, 'FB_UI_Hidden')) { window.setTimeout(function () { c.parentNode.parentNode.removeChild(c.parentNode); }, 3000); } else if (FB.Dom.containsCss(c, 'FB_UI_Dialog')) { FB.Dialog.remove(c); if (FB.TemplateUI && FB.UA.mobile()) FB.TemplateUI.populateCache(); } } catch (d) {} try { if (c.close) { c.close(); FB.UIServer._popupCount--; } } catch (e) {} delete FB.UIServer._loadedNodes[b.frame]; delete FB.UIServer._defaultCb[b.frame]; a(b); }, _xdResult: function (a, b, d, c) { return (FB.UIServer._xdNextHandler(function (e) { a && a(e.result && e.result != FB.UIServer._resultToken && FB.JSON.parse(e.result)); }, b, d, c) + '&result=' + encodeURIComponent(FB.UIServer._resultToken)); } });
I added the entire line 22 beautified Has anyone had this problem?
thank you
解决方案It seems the current url path must be under the "canvas url" you set in your facebook application settings for the auth dialog to work.
This is strange, because a like widget will work ok anywhere !
这篇关于SCRIPT70:权限被拒绝在IE9 API错误191的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!