将脚本元素插入浏览器操作页无效
insert script element into browser action page not work
当浏览器操作页面(popup.html)弹出时,我正试图从chrome扩展访问twitter。因为它是跨域访问,而chrome扩展跨域访问似乎只支持http,所以我使用Jsonp访问twitter api(https)。如果我直接在浏览器中打开popup.html,它会很好地工作,但它拒绝在chrome扩展中工作。
//manifest.json
"permissions": [
"tabs", "http://*/*", "https://*/*" ,"unlimitedStorage"
]
//popup.html
<html>
<head>
<meta charset="utf-8">
<script src="../js/jquery.min.js"></script>
<script src="../oauth/oauth.js"></script>
<script src="../oauth/sha1.js"></script>
<script src="../js/popup.js"></script>
</head>
<body>
...
</body>
</html>
//popup.js
function mycallback(json)
{
alert("callback"); //never get called in chrome extension
}
function getTwitter()
{
var url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var accessor = {
token: "...",
tokenSecret: "...",
consumerKey : "...",
consumerSecret: "..."
};
var message = {
action: url,
method: "GET",
parameters: {
"callback":"mycallback",
"include_entities":true,
"include_rts":true,
"user_id":"...",
"count":1
}
};
OAuth.completeRequest(message, accessor);
OAuth.SignatureMethod.sign(message, accessor);
url = url + '?' + OAuth.formEncode(message.parameters);
// Create a new script element
var script_element = document.createElement('script');
// Set its source to the JSONP API
script_element.setAttribute('type', 'text/javascript');
script_element.setAttribute('id', 'script_element');
script_element.setAttribute('src', url);
if(!document.getElementById('script_element'))
document.getElementsByTagName('head')[0].appendChild(script_element);
}
$(document).ready(function(){
getTwitter();
});
提前谢谢。
您的代码由于CSP而失败。请参阅此答案以了解如何调试popup.html
。
最好的解决方案是在Chrome扩展中不使用JSONP,而是使用XMLHttpRequest
:
从您的消息中删除callback
密钥,并将var script_element = ....
替换为
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = function() {
mycallback(JSON.parse(xhr.responseText));
};
xhr.send();
如果在执行上一步后得到"SyntaxError:Unexpected token m",请确保已从消息中删除callback
密钥。否则,Twitter的API仍将使用JSONP格式的响应进行回复。
如果出于某种原因,您仍然想使用JSONP,并且Web服务托管在https:scheme上,您也可以通过在manifest.json
:中添加以下字段来放宽CSP
"content_security_policy": "script-src 'self' https://api.twitter.com; object-src 'self'"
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- WebGL-操作useProgram无效
- Webgl readPixels() 无效操作:格式/类型组合无效
- MySql数据库INSERT操作在硬盘(localhost)上有效,但在Internet上托管时无效
- 是什么导致我的绘制数组调用无效操作
- 脚本 600:此操作的目标元素无效.(仅限 IE)
- 将脚本元素插入浏览器操作页无效
- IE 9出错-'SCRIPT600:此操作的目标元素无效
- 未捕获的ReferenceError:后缀操作中左侧表达式无效
- 无效的& # 39;instanceof # 39;在GeoExt3中操作ol3 .layer. base
- SCRIPT 600错误:此操作的目标元素无效
- 前缀操作中的左侧表达式无效
- 无法对无效元素执行操作:UIAElementNil
- 当所有HTML表单元素都经过验证时,如何使表单操作无效并执行jQuery ?