通过地址栏加载远程JavaScript文件

kap*_*ffy 8 javascript address-bar load

是否可以从地址栏加载远程JavaScript文件?

我一直试图将其放入地址栏:

javascript:src='http://depot.com/file.js';funcname();
Run Code Online (Sandbox Code Playgroud)

我不是用它来做坏事.我只是测试我的网站,就是这样.如果你想保护你的网站,你必须先学会攻击它,对吧?

Dan*_*llo 9

我想你应该能够做到以下几点:

javascript:(function () {
  var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.src = 'http://depot.com/file.js';
  document.getElementsByTagName('body')[0].appendChild(newScript);
})();
Run Code Online (Sandbox Code Playgroud)

这是一个非常有用的示例(将其粘贴到您的地址栏中):

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);
  }
})();
Run Code Online (Sandbox Code Playgroud)

瞧:

Stack Overflow角质化

实际上,这就是cornify.com在其bookmarklet中包含远程脚本的方式.


更新:

正如@Ben在另一个答案中指出的那样,调用远程脚本中定义的函数并不是那么简单.Ben提出了解决这个问题的方法,但还有另一个解决方案,即cornify正在使用的解决方案.如果你结账,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);
})();
Run Code Online (Sandbox Code Playgroud)

file_run.js简单地包括一个呼叫funcname().