Getting started
From first detection to a real controlled tab and your first useful DOM read, without skipping the safety model.
Want the quickest setup?
Start with the RTO SDK Lite.
It is the simplest public starting point and already includes
RTO.min.js, quick start notes, and beginner-friendly examples.
What makes RTO practical
RTO can drive a real browser tab on another explicitly allow-listed domain through the browser extension model.
That gives you cross-domain orchestration on visible tabs, locally, without a server or proxy.
What you will achieve
Detect the extension, open a real controlled tab, and finish with a first trustworthy success you can build on.
Best companion pages
Then move to Tab control API, DOM automation API, and the RTO_helpers hub.
Setup checklist
- Choose one loading style: individual helpers, helper packs, or the all-in-one bundle (see Downloads). If you use packs, load
RTO.core.min.jsfirst. - Serve your page from a normal web origin (
https://…orhttp://…). - Make sure the RTO extension is installed and enabled.
- Open the target host you want to control. If it is not authorized, RTO automatically presents its consent panel on the controller tab.
No secrets in logs
Avoid printing passwords, tokens, or personal data into the console or your page logs.
Two simple starting examples
Both examples are aligned with 8.6.0. The controller page itself does not need target-domain authorization.
<!-- Example A: helper pack mode -->
<script src="../RTO_helper_packs/RTO.core.min.js"></script>
<script>
(function () {
var tabKey = "demo";
RTOconnectOnce(1500).then(function (connected) {
if (!connected || !window.RTOconnected) {
console.warn("RTO extension not detected");
return;
}
return RTOForm.openTab(
{ "tabKey": tabKey, "url": "https://example.com", "focus": true, "newTab": true },
{ "timeoutMs": 130000 }
).then(function () {
return RTOForm.focusTab({ "tabKey": tabKey }, { "timeoutMs": 5000 });
});
}).catch(function (err) {
console.warn("RTO error:", err && err.code, err && err.message);
});
})();
</script>
<!-- Example B: all-in-one bundle -->
<script src="../RTO_helpers.min/RTO.min.js"></script>
<script>
(function () {
var tabKey = "demo";
RTOconnectOnce(1500).then(function (connected) {
if (!connected || !window.RTOconnected) {
console.warn("RTO extension not detected");
return;
}
return RTOForm.openTab(
{ "tabKey": tabKey, "url": "https://example.com", "focus": true, "newTab": true },
{ "timeoutMs": 130000 }
);
}).then(function () {
return RTOForm.listTabs({}, { "timeoutMs": 8000 });
}).then(function (data) {
if (data) console.log("Controlled tabs:", data.items || (data.data && data.data.items) || data);
}).catch(function (err) {
console.warn("RTO error:", err && err.code, err && err.message);
});
})();
</script>
About
RTOconnectOnce()RTOconnectOnce() is the simple gate for helper-based pages.
It updates window.RTOconnected.
UI helpers and helper packs use that flag to know when they can safely talk to the extension.
Run it
- Load one format only: individual helpers, packs, or
RTO.min.js. Do not mix them on the same page. - Call
RTOconnectOnce(1500)before your first action. - If the target host is not authorized, RTO automatically asks for consent in extension-controlled UI; do not attempt to automate that decision.
- Reuse the same
tabKeyfor the same workflow. In 8.5.0,openTabnow reuses that key cleanly instead of racing into duplicate tabs.