2016-12-06 24 views
0

加载外部JavaScript资源。 我使用的端点render.htmljs_source允许的页面范围内自定义JavaScript代码的评估,网页加载完成后,页面呈现之前。动态我目前使用<a href="https://splash.readthedocs.io/en/stable/" rel="nofollow noreferrer">Splash HTTP API</a>作为无头浏览器渲染请求飞溅HTTP渲染服务

我需要向外部资源发出额外请求,例如加载页面后加载jQuery

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = "https://code.jquery.com/jquery-1.5.1.min.js"; 
document.getElementsByTagName('head')[0].appendChild(script); 

问题是,通过这样做,对象在页面上下文中不可用。该脚本可能在最终呈现的HTML源的HEAD元件内加入:

<script type="text/javascript" src="https://code.jquery.com/jquery-1.5.1.min.js"></script> 

我尝试设置使用下述两种方法,以确保脚本被加载的回调的jQuery访问的任何'之前的方法。但是回调在两种情况下都无法被调用。

script.onreadystatechange = callback; 
script.onload = callback; 

运行在的控制台上述脚本做什么,我需要立刻使得页面内获得了jQuery资源。

回答

0

也许你可以把它与js_source工作,但作为一个功能js_source是相当有限的; /execute端点和一个自定义Lua中是更灵活,而且往往更容易使用:

function main(splash) 
    splash:autoload("https://code.jquery.com/jquery-1.5.1.min.js") 
    assert(splash:go(splash.args.url)) 
    assert(splash:wait(1.0)) 
    splash:runjs(splash.args.js_source) 
    return splash:html() 
end 

^^这个脚本模拟render.html终点,但预装jQuery的;它支持“网址”和“js_source论争与会有限制“等待”为1.0。

+0

我目前正在飞溅来自Python上下文的请求。我不会增加额外的依赖一样支持Lua脚本。注入的JavaScript代码,将渲染页面之前评估本来就是我一直在寻找。 –

+0

你是什么额外的依赖是什么意思?你使用Docker安装Splash吗?如果是这样,它已经支持Lua脚本 - 请参阅“/ lua_source”参数/执行端点。你不需要在客户端安装Lua。 –

+0

我的意思是额外的依赖是我不想支持Lua脚本,如果它不是真正需要的话。 Lua脚本以相同的方式评估js,唯一的区别是资源从外部下载,这在我的情况下不起作用。在我当前的实现中,我需要在页面加载后从浏览器上下文中发送一些额外的请求,以在页面上保存一些令牌。 –

0

我终于成功地解决了这个问题,它看起来像飞溅不会重新评估后的变化DOM,为我工作的事情是做一个同步的XMLHttpRequest到资源和评估响应:

src = "https://code.jquery.com/jquery-1.5.1.min.js"; 

var request = new XMLHttpRequest(); 
request.open('GET', src, false); 
request.send(null); 

if (request.status === 200) { 
    eval(request.responseText); 
}; 
相关问题