it-swarm.com.de

Registerkarte "Fokus" oder Fenster

für eine kleine App öffne ich ein paar Fenster/Registerkarten aus meinem Skript. Ob der Browser ein Fenster oder eine Registerkarte öffnet, liegt natürlich nicht in meiner Hand.

Ich halte jedoch die Verweise auf die neu erstellten window-Objekte und ändere ihren Inhalt "remote" aus einem anderen Fenster. Dies alles geschieht unter demselben document.domain, also kein xss-Problem.

Das Problem ist, ich kann die erstellten Fenster/Registerkarten nicht zuverlässig focus. Da ich eine sehr spezifische App für einen Kunden schreibe, ziehe ich Firefox nur als Browser an. Eine Option, die ich habe, ist natürlich nur eine remoteWindow.alert('foobar');, um das Fenster/den Tab nach vorne zu bringen, aber das ist ziemlich hässlich, oder?.

Ich habe diese Antwort gefunden Wie fokussiere ich Fenster/Tab wie Alarm ()?

dort heißt es, dass Firefox die Möglichkeit hat, den Skriptfokus zuzulassen. Meine Frage ist nun endlich: Was ist diese Option? Ich habe in about:config nach "Tabs" und "Fokus" gesucht, aber nichts dazu gefunden.

Wie konfigurieren

17
jAndy

Die einzige Lösung, die ich sehe, ist, das Popup in einem neuen Fenster zu erzwingen, da es scheinbar keine Möglichkeit gibt, eine andere Registerkarte zu fokussieren. Für diese Lösung müssen Sie auch die Standard-Javascript-Sicherheitseinstellungen in Tools > Options > Content tab ändern und auf die Schaltfläche Advanced neben Enable Javascript klicken, und das mittlere Kontrollkästchen aktivieren, um das Scharfstellen der Fenster zu ermöglichen. 

Um die Verwendung eines Fensters anstelle einer Registerkarte zu erzwingen, verwenden Sie win = window.open("http://www.google.com", "test" ,"modal=yes"); und rufen Sie dann win.focus(); auf, wenn Sie möchten.

EDIT: Eigentlich habe ich vergessen zu erwähnen, dass dies nur FF ist.

7
zatatatata

Folgendes scheint in IE8 und FF13 zu funktionieren:

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function openHelp(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>
<a href="help.html" target="help" onclick="return openHelp(this);">Help</a>
13
Alex

Haben Sie window.focus () versucht?

2
pradeek

Es gibt keine wirkliche Möglichkeit, dies zu tun, aus dem einfachen Grund, dass Websites mit dieser Fähigkeit letztendlich dazu verwendet würden, Anzeigen automatisch zu fokussieren.

Es ist möglich, aber nur in Firefox WENN der Benutzer es aktiviert hat, was er höchstwahrscheinlich nicht tut.

2
skimberk1

Siehe Mozillas Dokumentation: https://developer.mozilla.org/de/Code_snippets/Tabbed_browser .

  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var browserEnumerator = wm.getEnumerator("navigator:browser");

  // Check each browser instance

  while (browserEnumerator.hasMoreElements()) {
    var browserWin = browserEnumerator.getNext();
    var tabbrowser = browserWin.gBrowser;

    // Check each tab of this browser instance
    var numTabs = tabbrowser.browsers.length;
    for (var index = 0; index < numTabs; index++) {
      var currentBrowser = tabbrowser.getBrowserAtIndex(index);
      if (/*some logic*/) {

        // For an example
        tabbrowser.selectedTab = tabbrowser.tabContainer.childNodes[index];

        // Focus *this* browser-window
        browserWin.focus();
        break;
      }
    }

Hier ist ein einfacher ereignisgesteuerter Ansatz - https://developer.mozilla.org/En/Listening_to_events_on_all_tabs .

2

Haben Sie im Menü Extras -> Optionen -> Registerkarte Inhalt -> Schaltfläche Erweitert neben "JavaScript aktivieren" versucht, das Kontrollkästchen "Raise or Lower Windows" zu aktivieren?

Ein Beispiel für die Einstellung des Fokus finden Sie hier .

1
harrymc

Es ist schmutzig und hässlich, daher nur eine Information: Wenn Sie in einem der geöffneten Tabs/Fenster eine Warnung () aufrufen, wird der Fokus dieses Registers erhalten.

1
rhinoeli

Um Ihre question zu beantworten: Ich habe http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#RaiseLowerSetting gefunden, das besagt, dass die von Ihnen gesuchte Einstellung aufgerufen wird msgstr "Fenster hoch und runter zulassen".

Eine andere Einstellung wäre about:config/dom.disable_window_flip (auf false), gefunden hier .

1
Bergi

Auf Alex 'Beitrag oben eingehen. Der Anwendungsfall hat ein CMS. Wenn ein Websitebesitzer beim CMS angemeldet ist und das Frontend in eine andere Registerkarte geladen wird. Sie geben dem Websitebesitzer einen Link im Frontend, über den die CMS-Registerkarte neu geladen wird.

Platzieren Sie dieses Javacript auf den Frontendseiten (oder fügen Sie es in eine globale JS-Datei ein):

<script type="text/javascript">
// Stupid script to force focus to an existing tab when the link is clicked.
// And yes, we do need to open it twice.
function loadAdmin(a) {
    var tab = window.open(a.href, a.target);
    tab.close();
    tab = window.open(a.href, a.target);
    return false;
}
</script>

Ich möchte den CMS-Link direkt nach dem H1-Inhalt setzen. Dies ist wiederum nur dann der Fall, wenn sie am CMS angemeldet sind. In diesem Fall zeige ich auf ein Framed CMS, daher muss es wissen, was in den Mainframe geladen werden soll (Wortspiel beabsichtigt).

<h1>
    Page Heading
    <a href="/admin/main/?load=pages/page.cfm?id=#request.pageid#" title="Edit this page"
        onclick="return loadAdmin(this);"
        target="#cgi.server_name#wvAdmin"            
    ><img src="/media/admin/icon-edit.png" alt="Edit this page"/></a>
</h1>

Um sicherzustellen, dass die Registerkarte eindeutig ist, falls ich mehrere CMSs in meinem Browser habe (unterstützt mehrere Clients):

target = "# cgi.server_name # wvAdmin"

Fügen Sie schließlich auf dem Frame Loader im CMS Folgendes hinzu:.

<script type="text/javascript">
    window.name = '#cgi.server_name#wvAdmin';
</script>

Um sicherzustellen, dass der Benutzer, wenn er das CMS selbst öffnet, trotzdem damit arbeiten kann.

0
Jules

Die einfache Antwort lautet: Das geht nicht. Browser setzen diese Art von API nicht für Javascript aus.

0
WTK