是否可以从地址栏加载远程JavaScript文件?通过地址栏加载远程JavaScript文件
我一直试图把这个到地址栏:
javascript:src='http://depot.com/file.js';funcname();
我不使用这个坏事情。我只是测试我的网站,就这些。如果你想保护你的网站,你必须学会先攻击它,对吗?
是否可以从地址栏加载远程JavaScript文件?通过地址栏加载远程JavaScript文件
我一直试图把这个到地址栏:
javascript:src='http://depot.com/file.js';funcname();
我不使用这个坏事情。我只是测试我的网站,就这些。如果你想保护你的网站,你必须学会先攻击它,对吗?
我想你应该能够做到以下几点:
javascript:(function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://depot.com/file.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
})();
这里是一个非常有用的例子(粘贴在地址栏中):
javascript:(function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://cornify.com/js/cornify.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
for (var i = 0; i < 5; i++) {
newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://cornify.com/js/cornify_run.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
}
})();
瞧:
事实上,这是如何包括cornify.com将远程脚本放入其小书签中。
UPDATE:
由于@Ben noted in the other answer,它不是简单的打电话给你的远程脚本定义的函数。本提出了解决这个问题的一个解决方案,但也有另一个解决方案,即角质化正在使用的解决方案。如果您检出http://cornify.com/js/cornify_run.js
,您会看到该文件中只有一个函数调用。您可以将您的funcname()
调用放置在单独的JavaScript文件中,正如cornify所做的那样,因为脚本块保证按照它们插入的顺序执行。然后,你必须包括脚本,如下面的例子:
javascript:(function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://depot.com/file.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://depot.com/file_run.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
})();
凡file_run.js
简单地包括对funcname()
通话。
非常感谢你:) – kapitanluffy 2010-09-19 01:33:44
+1为整洁的图形。 – balupton 2010-09-19 01:52:01
所以file_run.js包含funcname(params)对不对? – kapitanluffy 2010-09-19 03:59:56
没有直接的方法来做到这一点,然而常见的黑客行为是运行几行JavaScript,将标签插入当前页面,并将其src属性设置为要运行的脚本的URL:
javascript:var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);
如果你想运行在远程文件(在你的问题啦funcname()
)定义的函数,这是比较麻烦一些。这是因为通过标签加载脚本是异步运行的,所以文件很可能还没有完成加载,立即将元素添加到DOM。我能想到的解决这个得到的唯一方法是你插入的元素,然后您可以在包含源文件的末尾调用之前定义的一些功能:
function doStuff() {
// run code that depends on the included JS file
};
// include the external script, as per the snippet above
你会那么包括对doStuff
通话在包含文件的末尾:
if(doStuff) doStuff();
最后的结果看起来是这样的:
javascript:function doStuff(){funcname()};var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);
+1当调用'funcname()'时提到异步问题...我在我的答案(从cornify中借用)中提出了另一个解决方案。 – 2010-09-18 16:31:51
不能直接回答,但仍然有帮助。
这里是一个脚本在JavaScript文件加载书签时:
javascript:var%20e=document.createElement('script');e.setAttribute('language','javascript');e.setAttribute('src','http://github.com/balupton/ajaxy-bookmark/raw/master/script.js');document.body.appendChild(e);void(0);
到地址栏...你是什么意思? – 2010-09-18 15:04:48
我想你用这个坏东西......“不要做坏事”:) – Topera 2010-09-18 15:07:00
添加几个unicrons有什么不好? :) – 2010-09-19 01:24:01