在javascript:URL中获取JSONP响应

时间:2013-10-30 07:45:46

标签: javascript dom jsonp

此代码有效:

(function() {
        var scr = document.createElement('script');
        var head = document.getElementsByTagName('head')[0];
        window.insert = function(data) {
                alert(data);
        };
        scr.src = 'http://nocore.info/test.php?callback=insert';
        scr.type = 'text/javascript';
        head.appendChild(scr);
})();

使用jsFiddle进行测试。它的作用是通过JSONp获取一个字符串并提醒它。

这段代码也是如此:

(function(){var a=document.createElement("script"),b=document.getElementsByTagName("head")[0];window.insert=function(a){alert(a)};a.src="http://nocore.info/test.php?callback=insert";a.type="text/javascript";b.appendChild(a)})();

但是当我输入javascript:在URL栏后面跟着这段代码,我什么都没得到。这究竟是为什么?我不知道有任何这样的行为。我可以在URL栏中设置window。*变量,我可以操作DOM。

那么这些人的问题是什么?

谢谢你们。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

It just doesn't work when you're on Google. I've tried it on a different page and it works.

它也适用于Google。您可以在<script>中找到<head/>标记。但是,没有弹出警报窗口。那是因为:

Can someone please explain why this is?

Google正在使用https,如果您的网站提供HTTPS网页,则默认情况下会阻止通过此网页上的HTTP传送的所有有效混合内容。 Chrome和{{1} (尚未测试其他浏览器。

这意味着,如果您的网站在安全SSL上运行,浏览将阻止来自外部http源的一些不安全内容。在你的情况下,那是Firefox。打开控制台面板,您将看到错误/警告:

http://nocore.info/test.php?callback=insert

如何解决:

  1. 使用支持安全SSL的其他主机。 [blocked] The page at https://www.google.com/ ran insecure content from http://nocore.info/test.php?callback=insert. 会奏效。如果我们正在讨论一些常见的JavaScript库,请使用支持https的Google,Microsoft等Microsoft CD。
  2. 以Chrome为例,使用名为“-allow-running-insecure-content”的Chrome命令行参数来禁用不安全内容检查。 [ NOT RECOMMEND ]
  3. About mixed content and how to view it - Knowledge Base

答案 1 :(得分:0)

好的,显然@Wayne是对的。当你在谷歌上时它就不起作用了。我在不同的页面上尝试过它并且有效。有人可以解释一下这是为什么吗?他们的JavaScript如何能够“解除”这段代码?