我有一个简单的javascript html文件,我用它来执行从我添加到Internet Explorer默认上下文菜单(通过Windows注册表)的菜单项调用的函数。单击菜单会触发以下javascript:
<script type="text/javascript">
var req = new ActiveXObject("Microsoft.XMLHTTP")
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
var serverResponse = req.responseText;
alert(serverResponse); // Shows "15"
}
}
};
req.open("POST", "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", true)
req.setRequestHeader("Content-Type","application/json")
req.send('{"longUrl": "https://bing.com"}')
</script>
如果我通过在IE中打开html文件来运行它,它可以正常工作。我收到了回复文字。但是,如果我通过Context Menu加载它,则永远不会调用“onreadystatechange”函数。
如果我在脚本的末尾添加“alert(”test“),那么稍后会通过serverResponse警报弹出测试警报。我认为它与警报阻止或强制执行浏览器做一些事情,但我无法弄清楚为什么它作为一个页面加载,但不是通过上下文菜单。
我应该注意脚本的其余部分会被调用,所以我知道菜单项正在运行。
修改
上面的代码片段运行并显示一个警告对话框,其中包含服务器响应的文本,只要它作为html页面执行。如果通过上下文菜单执行,我永远不会得到“alert(serverResponse)”。
但是,从上下文菜单调用时,以下版本可以正常工作:
<script type="text/javascript">
var req = new ActiveXObject("Microsoft.XMLHTTP")
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
var serverResponse = req.responseText;
alert(serverResponse); // Shows "15"
}
}
};
req.open("POST", "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", true)
req.setRequestHeader("Content-Type","application/json")
req.send('{"longUrl": "https://bing.com"}')
alert("test")
</script>
唯一的区别是在最后包含“警告(”测试“)”行