Send the viewer to a web page from inside your app: in a new tab, with the stream still running, or in the current tab, which ends the stream. Your web page can open links itself; this is for when the app decides.
| Triggered from | What you call | Works on the production player today |
|---|---|---|
| iframe | your page opens links itself (window.open); there is no message to make the player do it | — |
| Web SDK | the same: your page opens links itself | — |
| Unreal | the plugin's E3DS Open Url / E3DS redirect To nodes, or {"cmd":"launchUrl",...} / {"cmd":"redirectTo",...} | Yes |
The app sends the address; the player opens it. A new tab gets a reply sent back to the app saying whether it opened.
An embedding page that reacts to the app opening a link.
Demo coming soonThe same with the Web SDK.
Demo coming soonFor a link in your own interface, open it yourself: window.open("https://example.com", "_blank"). Nothing needs to go through the stream.
When the app opens a link, the player in the frame opens it itself. Your page also receives the same command as a message, if you want to know:
window.addEventListener("message", function (e) {
if (e.data && e.data.cmd === "launchUrl") {
// the app opened e.data.value in a new tab - do not open it again
}
});
redirectTo navigates the frame, not your page: the stream inside the frame ends and the frame shows the new address.
For a link in your own interface, open it yourself: window.open("https://example.com", "_blank").
When the app opens a link, the player opens it itself, and you are told:
e3ds_controller.callbacks.onResponseFromUnreal = function (raw) {
var msg; try { msg = JSON.parse(raw); } catch (e) { return; }
if (msg.cmd === "launchUrl") { /* opened msg.value - do not open it again */ }
};
With the E3DS Features plugin: add BP_E3DS_PS_Actor to your level. Then call E3DS Open Url (new tab) or E3DS redirect To (this tab), with the full address starting https://. Other plugins also have an "Open URL" node: the right one's tooltip says Target is BPFL E3DS PS Functions.
Without the plugin: add a PixelStreamingInput component to an actor and send this with Send Pixel Streaming Response:
{"cmd":"launchUrl","value":"https://www.eagle3dstreaming.com"}
{"cmd":"redirectTo","value":"https://www.eagle3dstreaming.com"}
The reply. After launchUrl the player sends your app a message with result (success or failed), reason when it failed, and receivedMsg, the request it answers. redirectTo has no reply: the page, and the stream, are gone.
A new tab opens reliably only right after the viewer clicked or pressed a key. Trigger it from their input.
| What you see | Why | What to do |
|---|---|---|
Reply failed, reason invalid url | The address has no scheme: www.example.com instead of https://www.example.com. | Send the full address. |
Reply failed, reason popup blocked or failed to open | The browser blocked the new tab: it did not follow a recent click or key press. | Trigger it from the viewer's input. |
| The node compiles but does nothing when streamed | An "Open URL" node from another plugin. | Use the one whose tooltip says Target is BPFL E3DS PS Functions. |
| The link opened twice | Your page opened it too when it saw the launchUrl message. | The player already opened it; only log it. |
| The stream ended | redirectTo leaves the page. | Use launchUrl to keep the stream running. |
The other features, each with the same three ways to call it.
Last updated