views:

586

answers:

8

I am looking for a way to improve the workflow in a PHP based CMS. There is a lot of switching between the editor mode and the preview mode of the page. The editor mode is huge to load, and so I would like to open the preview mode in a different window.

I don't want to use new windows or an iframe within the current window to keep the workflow simple and to avoid confusion.

Is there a way to explicitly open a new tab (not window), and to jump to that tab from a document, in Firefox? The number of users is limited, so there is the possibility to set up the client with the necessary extensions / permissions.

I know Firefox can be forced to open all links in tabs, but I think that won't cut it, as I still can't address and focus the newly opened window.

Thanks for all the great answers everyone. I have now enough material to decide whether I'll take the greasemonkey approach, rely on the user to set up "open in tabs" and address the window by name, or use a "inline" HTML solution as so many of you suggested. I am accepting the answer that I feel went most effort into.

+16  A: 

There is no way to force a window to open as a tab. It's all dependent on the user's preference settings.

Justin Johnson
Correct, imagine if there was... havoc.
Pino
I am so glad each tab has javascript sandboxing in modern browsers. The chaos that would ensue otherwise just doesn't bear thinking about
Neil Aitken
I agree that there is no way to do this in straightforward HTML for user experience reasons. That's why I mentioned that installing an extension is possible. Maybe one exists for this purpose.
Pekka
Perhaps use an ajax request, to load both the preview and the editor. Hide the panel that the editor is loading in until its loaded, meanwhile show the preview panel... I think this is the only elegant way to achieve this kinda thing. and with all the libraries out there implenting it quickly and cleanly shouldn't be too hard at all.
Zoidberg
Do browsers in fact have javascript sandboxing per tab? I was under the impression that you could `window.open()` a new tab, then use the return value (which is the WindowProxy for the new tab/window) to look at what that tab/window is doing, as long as it's in the same domain.
Jason Orendorff
Yes, @Jason, that is possible, but only on the same domain.
Justin Johnson
+1  A: 

Nope, there's no way to force the opening of a new tab, simply because this would be unsupported by un-tabbed browsing

You can only set it to open a new window, not a new tab.

Daniel May
+1  A: 

Greasemonkey springs to mind - a quick google gives open in tabs on left click. I think you could modify that so it only runs on one particular page, and you'd be up up and away.

Dan F
+3  A: 

You say you don't want to use an iframe to avoid confusion. Now I don't know about the layout of your website, but I've been using the approach that the editor opens in its own div right next to the content being edited and the content is being live updated as you edit. No need to change tabs.

(If the window is too narrow there are HTML tabs Edit and Preview)

It does not seem to add confusion to the user and for me this approach works really well. Maybe it's worth considering in your case.

Pascal
+1, I like the option of the tabbed-view, which is -I think- the closest in terms of UI to the requested/hoped-for feature.
David Thomas
+2  A: 

What about using iframes and JavaScript?

I know you said you want to avoid 'confusion using iframes', but in my opinion if you really need to load different pages at the same time this is the best option.

In theory, you could create your own tab system using javascript or even better, using jQuery, because its UI module offers pretty cool tab control.

For every tab you could load separate "headerless-footerless" version of your specific admin page inside <iframe> element. If user wanted to modify something different, he will simply click on the tab and bring different iframe.

All this could also be done using AJAX, but iframe solution is quite easy as you just need to load ready page and all postbacks are already handled by original page and separated from master-admin-page.

You might also need to play a little bit to set correct height of your iframe to fit all the content without scrollbars, but this again, is just bit of javascript.

rochal
+3  A: 

I second the answers that say you should do this in HTML using Javascript. Then it can work in all browsers that support JS.

I would put two divs on the page and show/hide each div depending on which tab is selected. If you are clever about this you could trap the click on the tab and determine if the user left-clicked or middle-clicked. If they left click you load that tab on the page. If they middle-click you let the browser open a new tab/window (according to the user's prefs, don't try to force it), and leave the current window unchanged (that is, don't switch to the new tab). The action for clicking on the tab would be to use AJAX to load the contents of the remote document and put it into the tab. Use Javascript to modify the URL before submitting the AJAX request so that the server knows to send a web page fragment instead of the whole page.

The advantage of this dual-natured solution is that the tabbed approach will work the way you want it to work for the majority of cases, but for users with, say, two screens, or who prefer switching between browser tabs, they will still have the flexibility to work in multi-window mode. This can all be done without any browser extensions and it should work equally well in IE as well as Firefox, Opera, etc. Avoid locking yourself into one browser, even one as excellent as Firefox. One day a customer will need to use Opera or Safari and you'll be stuck.

Mr. Shiny and New
+1  A: 

This question made me wonder if HTML 5 allows that sort of specification, and it doesn't (nothing in one of the other hyperlink attributes, either). A new browsing context is a new browsing context, there's no way to express a preference for tab over window or foreground over background.

L33tminion
+1  A: 

You can't force a tab, but if you use a target with a specific name, like target="my_cms_window", many browsers will open this as a new tab. Additionally, they will remember the name and if you use the target repeatedly, put the contents in the same tab. I have found that this works pretty well in the real world.

ndp
Wordpress uses this method for post/page previews
Justin Johnson