org.directwebremoting.dwrp.HtmlScriptConduit Maven / Gradle / Ivy
package org.directwebremoting.dwrp;
import java.io.IOException;
import java.io.PrintWriter;
import org.directwebremoting.extend.EnginePrivate;
import org.directwebremoting.util.MimeConstants;
/**
* A ScriptConduit for use with HTML/SCRIPT wrapped Javascript output.
* Scripts begin with an html and script tags. The scripts have been altered
* to include an 'execute-in-parent-context' wrapper.
*
If this conduit is used, the output should be directed to an iframe. No
* polling should be required.
*
This conduit works with IE 6/7 since the 4k buffer drawback does not prevent
* the execution of script elements.
* @author Joe Walker [joe at getahead dot ltd dot uk]
*/
public class HtmlScriptConduit extends BaseScriptConduit
{
public HtmlScriptConduit(PrintWriter out, String instanceId, String batchId, String documentDomain)
{
super(out, instanceId);
this.batchId = batchId;
this.documentDomain = documentDomain;
}
public String getOutboundMimeType()
{
return MimeConstants.MIME_HTML;
}
public void beginStreamAndChunk()
{
out.println("
");
beginChunk(true);
out.println(EnginePrivate.remoteBeginIFrameResponse(batchId, true));
}
public void beginChunk()
{
beginChunk(false);
}
private void beginChunk(boolean setDocumentDomain)
{
if (!chunkOpen) {
out.println("");
chunkOpen = false;
}
}
public void endStreamAndChunk() throws IOException
{
beginChunk();
out.println(EnginePrivate.remoteEndIFrameResponse(batchId, true));
endChunk();
out.println("");
}
private final String batchId;
private final String documentDomain;
/**
* Is a chunk section currently open on the output?
*/
private boolean chunkOpen = false;
}