根据雅虎的"加速你网站的最佳实践",使用iframe的优点:
但缺点是:
我想使用iframe使用本网站提到的技术加载广告:http: //meanderingpassage.com/2007/08/15/keeping-javascript-widgets-from-controlling-your-blog/
使用这种技术是否意味着只要将iframe请求的html内容返回给客户端,它就会加载广告脚本,可能会阻止页面的其余部分呈现和下载?或者,在下载和呈现文档的其余部分时,是否会同时处理iframe请求?
然而,我并不是在寻找关于广告是好还是坏的哲学的讨论.
将javascript变量中保存的值传递到同一个html页面上的iframe调用的最佳方法是什么?我正在尝试通过将广告投放javascript代码(典型document.write('<script type="text/javascript" src="..")移动到单独的iframe 来改善网站的网页响应时间.(根据这篇文章)
对广告服务器的请求通常需要每个站点声明一次的种子变量,并在每次客户端加载页面时递增.我想要做的是将种子变量传递到我的iframe部分调用的文档中.
种子变量在我的主html文档的'head'标签中初始化:
<head>
<script type="text/javascript">
<!--
custom_seed=1;
//-->
</script>
</head>
Run Code Online (Sandbox Code Playgroud)
稍后在html文档中,我通过iframe发出请求,iframe返回调用广告服务器所需的html.
<body>
<!-- a bunch of html to display the page -->
<iframe src="somepage.html" width="100%" height="100%">
<p>No support for iframe</p>
</iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
'somepage.html'中返回的html有一个用于调用广告服务器的脚本,需要使用先前声明的种子变量作为参数:
<script type="text/javascript">
document.write('<script type="text/javascript" src="http://ad.server.net/...seed='+ custom_seed +'?"></script>');
custom_seed++;
</script>
Run Code Online (Sandbox Code Playgroud)
有什么好办法实现这个目标?
你如何拥有grails应用程序以及web.xml中定义的其他servlet?
我想拥有它,以便一些url模式由servlet处理,而所有其他模式由Sitemesh/grails处理.
grails生成的web.xml的默认配置是:
<filter-mapping>
<filter-name>charEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>grailsWebRequest</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>urlMapping</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>grails</servlet-name>
<servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)
然后我将配置添加到我的第二个servlet的web.xml:
<servlet>
<servlet-name>Tracepoints</servlet-name>
<servlet-class>com.mydomain.Tracepoints</servlet-class>
<init-param>
<param-name>hostName</param-name>
<param-value>http://www.mydomain.com/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Tracepoints</servlet-name>
<url-pattern>*.tpoints</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但上面的内容不允许我访问我的非grails servlet(使用url:domain.com/hello.tpoints)并尝试获取404.我知道servlet的类文件是随战争部署的,因为它们存在于WEB-INF/classes目录中.