OPEN-MIME-RESOURCE¶
Introduction¶
OPEN-MIME-RESOURCE is designed to be used for displaying different document types created by 4GL applications or external systems. These documents are loaded into the user's web browser. This can be as a tab or as a new window, depending on the scenario. The browser then determines how to process the document. The document type is defined by standard MIME types. For MIME types which the browser can directly render, it will display the content as a page. For MIME types which cannot be rendered but which have an application helper registered, that helper will be invoked. For unrecognized MIME types, the user will be prompted to save the file locally.
One can use OPEN-URL to load a URL without a MIME type.
In the discussion below document and resource are used interchangeably.
This feature was created in task #1815 and modified in #3474 and #4077.
4GL Syntax¶
Before Trunk Revision 11340¶
FWD provides this feature via the following language statement before trunk rev 11340:
OPEN-MIME-RESOURCE <mime-type> <url> [embedded].
Where:
mime-typeis the resource MIME type. It can hold any valid character expression.urlis the resource URL (the path to the resource) and it can be any valid character expression.embeddedis any valid logical expression. This parameter can be omitted and in this case this statement is equivalent totrue.
After Trunk Revision 11340¶
Starting from the trunk revision 11340 the command syntax has changed.
The third optional logical expression is substituted by the corresponding named flag constant NOT-EMBEDDED and new optional flag DELETE-SOURCE is added so OPEN-MIME-RESOURCE becomes
OPEN-MIME-RESOURCE <mime-type> <url> [NOT-EMBEDDED] [DELETE-SOURCE].
Where:
mime-typeis the resource MIME type. It can hold any valid character expression.urlis the resource URL (the path to the resource) and it can be any valid character expression.NOT-EMBEDDEDrepresents that the given resource is not displayed as an embedded document in the web browser, the given resource becomes embedded by default if this flag is omitted.- If
DELETE-SOURCEis present and the given resource is local file, then it must be deleted after this method returns. IfDELETE-SOURCEis omitted, then the given resource is not deleted.
Other Details¶
If url represents a local file system resource, then its file system path will be hidden by mapping its value to a generated virtual path and this document will be accessed by this virtual path. If url represents an external resource, then its url path is not hidden and this statement opens a new browser page by the given url path.
The mime-type parameter is important to be set correctly, but in some cases browsers can detect the loaded content in order to find out its mime-type:
https://developer.mozilla.org/en-US/docs/Mozilla/How_Mozilla_determines_MIME_Types#Introduction
At this time, no checking of the URL is done. It is the application's responsibility to properly secure the input URL. It is strongly recommended to limit the URL to absolute paths and to otherwise check the entire text of the URL before submitting it.
Non-Embedded Example¶
In this example the file output stream is used to create a file and then this file is displayed. For the web client it is displayed in a new page but for the Swing client the OS helper application associated with the mime type "text/plain" can be used to open this text file.
def var i as int.
message "Starting.".
path = "c:\\test\\report.txt".
output to value(path) page-size 10.
repeat i = 1 to 1000:
display "this is a test line" i.
end.
output close.
message "Finished.".
open-mime-resource "text/plain" "file:///" + path false.
Embedded Example¶
If the embedded parameter is true, then this file is embedded into a template html page with help of iframe HTML element:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe
https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement
The current template implementation extends its embedded content into all available screen width:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>${documentTitle}</title>
<style type="text/css">
.view {
position: fixed;
width: 100%;
height: 100%;
margin: 0px;
background: white;
}
</style>
<script type="text/javascript">
function onLoad()
{
var config = {'isStreamed' : ${isStreamed} };
var el = document.getElementById("embeddedDocument");
if (config.isStreamed)
{
el.src = "https://" + window.location.host + "${webRoot}/${documentHandler}/${documentPath}";
}
else
{
el.src = "${documentPath}";
}
el.height = window.innerHeight;
var resizeListener = function()
{
el.height = window.innerHeight;
}
window.addEventListener("resize", resizeListener);
}
window.onload = onLoad;
</script>
</head>
<body class="view">
<iframe id="embeddedDocument" type="${documentType}" scrolling="auto" width="100%" style="overflow:auto;border:0;"/>
</body>
</html>
It is important to check if the corresponding plugin is supported by the particular browser:
https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray
FWD Implementation Details¶
The converted Java code will call the one from these static methods of WebBrowserManager that matches exactly all given input type parameters:
Before Trunk Revision 11340¶
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(String mimeType, String path);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, String path, boolean embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, character path, logical embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, character path, boolean embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(character mimeType, character path);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(String mimeType, character path);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(character mimeType, String path);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, character path, boolean embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, String path, boolean embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, character path, logical embedded);
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, String path, logical embedded);
After Trunk Revision 11340¶
This revision added a new boolean parameter, called deleteContent, at the first position. If DELETE_SOURCE flag is present in 4GL OPEN-MIME-RESOURCE statement, then new boolean parameter is added on the top of the given parameters. The matched version of the following static methods will be used to convert OPEN-MIME-RESOURCE statement.
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(String mimeType, String path)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(boolean deleteContent, String mimeType, String path)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(boolean deleteContent,
String mimeType,
String path,
boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, String path, boolean embedded)
/**
* Opens the specified file resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param filePath
* The file path to the target resource.
* @param embedded
* The document is embedded in the template document.
* @param preferredMimeTypes
* The preferred resource mime types.
*/
public static void openMimeResource(boolean deleteContent,
String filePath,
boolean embedded,
List<String> preferredMimeTypes)
/**
* Opens the specified file resource in a browser's window.
*
* @param filePath
* The file path to the target resource.
* @param embedded
* The document is embedded in the template document.
* @param preferredMimeTypes
* The preferred resource mime types.
*/
public static void openMimeResource(String filePath,
boolean embedded,
List<String> preferredMimeTypes)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, character path, logical embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, character path, boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(boolean deleteContent,
character mimeType,
character path,
boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(boolean deleteContent,
character mimeType,
String path,
boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(boolean deleteContent,
String mimeType,
character path,
boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(boolean deleteContent, character mimeType, character path)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(character mimeType, character path)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(String mimeType, character path)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(boolean deleteContent, String mimeType, character path)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(character mimeType, String path)
/**
* Opens the specified resource in a browser's window.
*
* @param deleteContent
* Indicates if the source content will be deleted after the document is loaded by
* the client.
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
*/
public static void openMimeResource(boolean deleteContent, character mimeType, String path)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, character path, boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, String path, boolean embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(String mimeType, character path, logical embedded)
/**
* Opens the specified resource in a browser's window.
*
* @param mimeType
* The resource mime type.
* @param path
* The url path to the target resource.
* @param embedded
* The document is embedded in the template document.
*/
public static void openMimeResource(character mimeType, String path, logical embedded)
The client common api¶
This code will use driver-specific code for the launching or loading. It invokes this client side code of ThinClient that delegates this call farther to the GUI Swing or Web client drivers.
public void openMimeResource(boolean deleteContent,
String mimeType,
String urlString,
boolean embedded)
{
urlString = UiUtils.resolveResourceUrl(urlString);
try
{
tk.getInstanceDriver().openMimeResource(deleteContent, mimeType, urlString, embedded);
}
catch (MalformedURLException | URISyntaxException e)
{
displayErrorMessage("A malformed URL is provided: '" + urlString + "'");
}
}
In particular it is important to note that in some cases a browser program or a OS helper application will be launched and in other cases the URL will be loaded into an existing browser. See below for specific.
The statement will return after the launch/load occurs. It will not block or otherwise wait for the page/browser to be closed.
This feature was implemented in task #1815.
ChUI Drivers¶
The ChUI drivers don't support this feature, they silently do nothing in this case.
Swing GUI¶
The Swing GUI driver will launch the OS helper application in case of file:/// URL or the OS default browser in all other cases if the OS desktop feature (API) is supported, otherwise it will launch a separate executable program. The command line program name for this executable is calculated as follows:
1. If browser-executable is specified in the directory, it will be honored. This value can hold a simple program name OR it can be the program name and default arguments. The first text in the entry must be the program name. If there is whitespace following the program name, any text after the whitespace is treated as the default arguments to the program. Due to this design, you may not use embedded whitespace inside the browser's program name. See the directory configuration reference for details on where to specify this value in the directory.
2. If not specified, then a platform specific browser default is used:
| Platform | Browser Program | Default Arguments |
|---|---|---|
| Linux | firefox |
n/a |
| MacOS | open |
-a safari |
| Solaris | firefox |
n/a |
| Windows | iexplore.exe |
n/a |
In addition to any default arguments, the URL is passed on the command line.
Web GUI¶
The web GUI driver does not launch a separate browser. It will simply load the URL into a new browser window in the same browser instance in which the FWD web client is already running. There are two cases for using OPEN-MIME-RESOURCE with the default settings and with NOT-EMBEDDED option.
For the default settings the target resource is opened in new window or tab.
The Window loads the provided URL with this JavaScript code (see https://developer.mozilla.org/en-US/docs/Web/API/Window/open):
window.open(url, "_blank");
If a window named "_blank" does not exist, it should open new window, otherwise it will load into the existing window of that name. From the Mozilla documentation:
The
open()method creates a new secondary browser window, similar to choosingNew Windowfrom theFilemenu. ThestrUrlparameter specifies the URL to be fetched and loaded in the new window. IfstrUrlis an empty string, then a new blank, empty window (URL about:blank) is created with the default toolbars of the main window....
If a window with the name already exists, then
strUrlis loaded into the existing window.
If NOT-EMBEDDED option is set, then the target resource is downloaded using an html link pointed to the target resource. It is important that the corresponding helper application action for downloading the target resource was set to Always Ask or Save File.
For Firefox it can be set with help of Settings menu.

OPEN-MIME-RESOURCE parameters:¶
mime-typeis the resourceMIMEtype. It can hold any valid character expression.urlis the resourceURL(the path to the resource) and it can be any valid character expression.NOT-EMBEDDEDrepresents that the given resource is not displayed as an embedded document in the web browser, the given resource becomes embedded by default if this flag is omitted.- If
DELETE-SOURCEis present and the given resource is local file, then it must be deleted after this method returns. IfDELETE-SOURCEis omitted, then the given resource is not deleted.
OPEN-MIME-RESOURCE browser settings that affect opening new tab.¶
Firefox 105.0/Ubuntu 18.04
| <Mime-type> | <url> | [NOT-EMBEDDED] | [DELETE-SOURCE] | Block pop-up windows | Content-Action settings Ask | Open | Download | Use System default | Use other | Results |
| application/pdf | Local file url | NOT-EMBEDDED | Allowed pop-ups | Ask | Window.open asks a user’s approve to save the target document or to cancel downloading. | |||||
| - | Local file url | NOT-EMBEDDED | - | Open | Window.open displays the target resource. | |||||
| - | Local file url | NOT-EMBEDDED | - | Download | Window.open downloads the target resource. | |||||
| - | Local file url | EMBEDDED | - | Open | Window.open the template document from the web client and displays the target document inside iframe | |||||
| plain/text | Local file url | EMBEDDED | - | * | * | * | * | * | Window.open the template document from the web client and displays the target document inside iframe |
Safary 15.6/Mac OS X 10_15_7
| <Mime-type> | <url> | [NOT-EMBEDDED] | [DELETE-SOURCE] | Websites> Pop-up windows: Allow | Block | Block and Notify | Websites> Downloads: Allow | Ask | Deny | Results |
| application/pdf or plain/text | Local file url | NOT-EMBEDDED | Allow | Allow | Ask | If Allow download is set, then window.open downloads the target resource, otherwise window.open asks a user’s approve to save the target document or to cancel downloading. | ||||
| application/pdf or plain/text or image/jpeg | Local file url | EMBEDDED | Allow | Allow | Ask | Deny | window.open opens the template document from the web client and displays the target document inside iframe |
Google Chrome 107.0.5304.87/Ubuntu 18.04
Browser settings:
Sites settings>Pop-ups and redirects
Sites settings >Automatic downloads Ask|Deny
PDF Documents: Open in Chrome| Downloads
| <Mime-type> | <url> | [NOT-EMBEDDED] | [DELETE-SOURCE] | Sites settings>Pop-ups and redirects | Downloads>Ask where to save each file before downloading | PDF Documents: Open in Chrome | Downloads | Results |
| application/pdf or plain/text | Local file url | NOT-EMBEDDED | Allow | “TRUE” | Window.open asks a user’s approvement to save the target document or to cancel downloading. | |||
| - | Local file url | NOT-EMBEDDED | - | “FALSE" | Window.open downloads the target resource. | |||
| application/pdf | Local file url | NOT-EMBEDDED | - | Open in Chrome | Downloads | Window.open downloads the target resource. | ||
| application/pdf or plain/text | Local file url | EMBEDDED | - | TRUE or FALSE | Window.open the template document from the web client and displays the target document inside template’s iframe | |||
| application/pdf | Local file url | EMBEDDED | - | TRUE or FALSE | Downloads | Window.open opens the template document from the webclient and displays the open button to view the target document inside template’s iframe, but clicking on that button displays resource unavailable server message due to the target resource is deleted from the server cache on its downloads task has been completed |
© 2004-2020 Golden Code Development Corporation. ALL RIGHTS RESERVED.