2017-04-05 72 views
0

进入JavaScript时的在浏览器控制台窗口:的Javascript需要在浏览器控制台

1)

下面的代码工作:

alert('hi'); 

2)

以下不:

(function() { 
var scr = document.createElement('script'); 
scr.src = 'http://www.myrandomwebsite.com/myjs.js'; 
document.head.appendChild(scr); 
myfunc(); 
})() 

其中myjs.js文件夹包含:

var myfunc = function(){alert('hi')}; 

解释2) 的代码在这种情况下输入的代码段确实会导致下面的代码来显示在报头的末尾标签中的源代码:

<script src="http://www.myrandomwebsite.com/myjs.js"></script> 

但功能MYFUNC没有被认可,因为我得到了以下错误消息:

VM132:5 Uncaught ReferenceError: myfunc is not defined

这使我相信,作为一种安全措施,浏览器不运行在页面加载后编辑JavaScript代码, 或类似的规定。

问题:有没有这方面的解决方法?它是否是在大多数编程语言中像require('...');一样的函数。 但它不能是通过安装任何特殊的扩展,只是在飞行中的工作。

我走过很多地方,在不同的计算机上工作,并希望能够使用我的一些代码,而不需要随身携带USB。

________________________ UPDATE ________________________

解决方案@Jared史密斯提出了完美。现在有一个不起作用的例子(我明白为什么)。当一个网站有一个内容安全,政策是不允许从其它网址或任何连接加载脚本加载:

例如:

Content-Security-Policy: script-src 'self' https://apis.google.com 
Content-Security-Policy: connect-src 'self' https://apis.google.com 

这非常有意义。我的情况是我有我自己的代码,但我希望能够将此代码存储在另一个站点上,并在旅行中或在其他计算机上使用它,而无需从USB中提取它们。

现在我明白网站的白名单出于安全原因加载了哪些源脚本,但我不明白为什么在开发者控制台完成时没有例外。CSP主要用于防止XSS攻击等,但控制台中的某人故意使用代码和测试功能。

问题:控制台中是否有某些功能可以允许从其他站点加载脚本?我一直在摆弄源脚本代码段,但一直未能找到选项。或者可能还有其他一些无关的工作?

+2

您需要等待脚本标记的'onload'事件。 –

+0

@JaredSmith怎么样?如果我进入页面并完全加载,然后打开检查元素,请转到控制台,即我想要执行代码时。一切都已经加载,但仍然发生错误。 – Webeng

+0

'src.onload = function(){myfunc(); };'。浏览器必须获取脚本src,这是一个异步操作,您必须使用回调。 –

回答

1

的解释有一点是为了在这里。

当您动态添加带有src的脚本标记时,浏览器将触发对JavaScript文件的请求。但是这个操作与页面上最初的常规标签不同,它是异步,它不会阻止。这意味着下一行代码(在你的情况下调用myfunc)立即执行,而文件仍然被抓取。所以如果你想推迟代码执行,直到脚本被提取,解析和执行之后,你需要注册一个回调函数。我们可以通过监听脚本元素的load事件来做到这一点。有两种方法:

​​

和分配功能的脚本元素onload财产。唯一真正的区别是addEventListener的方式允许你附加多个监听器,其中scr.onload只能有一个值(就像任何其他对象属性一样)。

+0

美丽的解释 – Webeng

+0

海伊@Jared史密斯,我想跟随你有趣的讨论。代码一直很好,但我发现了1个具体的情况,可能有点棘手的问题需要解决。我用新的信息更新了我的原始邮政,你能检查出来并告诉我你的想法吗? – Webeng

+0

@Webeng在这方面没有什么特别的控制台。请注意,外部服务器需要启用CORS才能使用跨源数据源。 –

1

这个工程:

var scr = document.createElement('script'); 
scr.text = 'function sayHi() { alert("hi")}'; 
document.head.appendChild(scr); 
sayHi() 

... aaaaaand这个工程:

var scr = document.createElement('script'); 
scr.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js'; 
scr.onload = function() { 
    $(function(){ 
    $('body').css({backgroundColor: 'red'}); 
    }); 
} 
document.head.appendChild(scr); 
+1

OP是专门询问有关使用url源的内容,而不是内联脚本。 –

+0

谢谢你的回应约翰!但我想要的是使用另一个网站上的代码。用你的代码片段,我将不得不记住所有的代码并重写它。我想拥有自己的网站及其上的代码,然后我很容易以这种方式访问​​。 – Webeng

+0

np我更新,以及 –