ti-enxame.com

Tem certeza de que deseja sair desta página? Pop-up do navegador para evitar o fechamento acidental da guia durante a edição

Existe uma maneira de forçar meu navegador (Chrome) quando edito (JCE) um artigo no frontend para exibir uma mensagem impedindo o fechamento ou redirecionamento acidental de guias?

Costumo cometer esse erro ao fechar uma guia e perder todo o meu trabalho.

Em algum momento, clicando para trás, posso recuperar meu trabalho, mas geralmente não funciona.

Observe que estou ciente de que devo tomar cuidado onde clico e que devo salvar com frequência.

EDITAR:

function getJavaScript($message) {


    $javascript .= 'if(window.addEventListener){ // Mozilla, Netscape, Firefox' . "\n";
    $javascript .= '    window.addEventListener("load", function(){ alert("' . $message . '");}, false);' . "\n";
    $javascript .= '} else { // IE' . "\n";
    $javascript .= '    window.attachEvent("onload", function(){ alert("' . $message . '");});' . "\n";
    $javascript .= '}';
    return $javascript;
}

$doc = JFactory::getDocument();
$doc->addScriptDeclaration( getJavaScript( 'Make sure you have saved your JCE content.' ) );

EDIT 2: C: Meus modelos\protostar\html\com_content\form\edit.php

<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('behavior.tabstate');
JHtml::_('behavior.keepalive');
JHtml::_('behavior.calendar');
JHtml::_('behavior.formvalidation');
JHtml::_('formbehavior.chosen', 'select');
JHtml::_('behavior.modal', 'a.modal_jform_contenthistory');

// Create shortcut to parameters.
$params = $this->state->get('params');
//$images = json_decode($this->item->images);
//$urls = json_decode($this->item->urls);

// This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings.
$editoroptions = isset($params->show_publishing_options);
if (!$editoroptions)
{
    $params->show_urls_images_frontend = '0';
}
/// lodder code pour pop up front end
$js = '
    var needToConfirm = true;

    window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (needToConfirm) {
            return "Make sure you have saved your JCE content";
        }
    }    
';


/// end lodder code pour pop up front end


?>

<script type="text/javascript">
    Joomla.submitbutton = function(task)
    {
        if (task == 'article.cancel' || document.formvalidator.isValid(document.getElementById('adminForm')))
        {
            <?php echo $this->form->getField('articletext')->save(); ?>
            Joomla.submitform(task);
        }
    }
</script>
<div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
    <?php if ($params->get('show_page_heading', 1)) : ?>
    <div class="page-header">
        <h1>
            <?php echo $this->escape($params->get('page_heading')); ?>
        </h1>
    </div>
    <?php endif; ?>

    <form action="<?php echo JRoute::_('index.php?option=com_content&a_id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate form-vertical">
        <div class="btn-toolbar">
            <div class="btn-group">
                <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('article.save')">
                    <span class="icon-ok"></span>&#160;<?php echo JText::_('JSAVE') ?>
                </button>
            </div>
            <div class="btn-group">
                <button type="button" class="btn" onclick="Joomla.submitbutton('article.cancel')">
                    <span class="icon-cancel"></span>&#160;<?php echo JText::_('JCANCEL') ?>
                </button>
            </div>
            <?php if ($params->get('save_history', 0)) : ?>
            <div class="btn-group">
                <?php echo $this->form->getInput('contenthistory'); ?>
            </div>
            <?php endif; ?>
        </div>
        <fieldset>
            <ul class="nav nav-tabs">
                <li class="active"><a href="#editor" data-toggle="tab"><?php echo JText::_('COM_CONTENT_ARTICLE_CONTENT') ?></a></li>
                <?php if ($params->get('show_urls_images_frontend') ) : ?>
                <li><a href="#images" data-toggle="tab"><?php echo JText::_('COM_CONTENT_IMAGES_AND_URLS') ?></a></li>
                <?php endif; ?>
                <li><a href="#publishing" data-toggle="tab"><?php echo JText::_('COM_CONTENT_PUBLISHING') ?></a></li>
                <li><a href="#language" data-toggle="tab"><?php echo JText::_('JFIELD_LANGUAGE_LABEL') ?></a></li>
                <li><a href="#metadata" data-toggle="tab"><?php echo JText::_('COM_CONTENT_METADATA') ?></a></li>
            </ul>

            <div class="tab-content">
                <div class="tab-pane active" id="editor">
                    <?php echo $this->form->renderField('title'); ?>

                    <?php if (is_null($this->item->id)) : ?>
                        <?php echo $this->form->renderField('alias'); ?>
                    <?php endif; ?>

                    <?php echo $this->form->getInput('articletext'); ?>
                </div>
                <?php if ($params->get('show_urls_images_frontend')): ?>
                <div class="tab-pane" id="images">
                    <?php echo $this->form->renderField('image_intro', 'images'); ?>
                    <?php echo $this->form->renderField('image_intro_alt', 'images'); ?>
                    <?php echo $this->form->renderField('image_intro_caption', 'images'); ?>
                    <?php echo $this->form->renderField('float_intro', 'images'); ?>
                    <?php echo $this->form->renderField('image_fulltext', 'images'); ?>
                    <?php echo $this->form->renderField('image_fulltext_alt', 'images'); ?>
                    <?php echo $this->form->renderField('image_fulltext_caption', 'images'); ?>
                    <?php echo $this->form->renderField('float_fulltext', 'images'); ?>
                    <?php echo $this->form->renderField('urla', 'urls'); ?>
                    <?php echo $this->form->renderField('urlatext', 'urls'); ?>
                    <div class="control-group">
                        <div class="controls">
                            <?php echo $this->form->getInput('targeta', 'urls'); ?>
                        </div>
                    </div>
                    <?php echo $this->form->renderField('urlb', 'urls'); ?>
                    <?php echo $this->form->renderField('urlbtext', 'urls'); ?>
                    <div class="control-group">
                        <div class="controls">
                            <?php echo $this->form->getInput('targetb', 'urls'); ?>
                        </div>
                    </div>
                    <?php echo $this->form->renderField('urlc', 'urls'); ?>
                    <?php echo $this->form->renderField('urlctext', 'urls'); ?>
                    <div class="control-group">
                        <div class="controls">
                            <?php echo $this->form->getInput('targetc', 'urls'); ?>
                        </div>
                    </div>
                </div>
                <?php endif; ?>
                <div class="tab-pane" id="publishing">
                    <?php echo $this->form->renderField('catid'); ?>
                    <?php echo $this->form->renderField('tags'); ?>
                    <?php if ($params->get('save_history', 0)) : ?>
                        <?php echo $this->form->renderField('version_note'); ?>
                    <?php endif; ?>
                    <?php echo $this->form->renderField('created_by_alias'); ?>
                    <?php if ($this->item->params->get('access-change')) : ?>
                        <?php echo $this->form->renderField('state'); ?>
                        <?php echo $this->form->renderField('featured'); ?>
                        <?php echo $this->form->renderField('publish_up'); ?>
                        <?php echo $this->form->renderField('publish_down'); ?>
                    <?php endif; ?>
                    <?php echo $this->form->renderField('access'); ?>
                    <?php if (is_null($this->item->id)):?>
                        <div class="control-group">
                            <div class="control-label">
                            </div>
                            <div class="controls">
                                <?php echo JText::_('COM_CONTENT_ORDERING'); ?>
                            </div>
                        </div>
                    <?php endif; ?>
                </div>
                <div class="tab-pane" id="language">
                    <?php echo $this->form->renderField('language'); ?>
                </div>
                <div class="tab-pane" id="metadata">
                    <?php echo $this->form->renderField('metadesc'); ?>
                    <?php echo $this->form->renderField('metakey'); ?>

                    <input type="hidden" name="task" value="" />
                    <input type="hidden" name="return" value="<?php echo $this->return_page; ?>" />
                    <?php if ($this->params->get('enable_category', 0) == 1) :?>
                    <input type="hidden" name="jform[catid]" value="<?php echo $this->params->get('catid', 1); ?>" />
                    <?php endif; ?>
                </div>
            </div>
            <?php echo JHtml::_('form.token'); ?>
        </fieldset>
    </form>
</div>
2
JinSnow

Você pode usar o seguinte Javascript, que exibirá uma caixa de alerta perguntando se você deseja sair da página ou permanecer nela quando fechar uma guia do navegador.

<script>
    window.onbeforeunload = function() {
        return 'Make sure you have saved your JCE content';
    }
</script>

Se você está se perguntando onde adicionar seu código, pode:

  1. Adicione-o ao arquivo index.php do modelo de administração, no entanto, este é um truque básico para que todas as atualizações de modelos substituam essa alteração.
  2. Você pode criar um pequeno Plugin que executa esse código.
  3. Crie uma Substituição do modelo para a visualização com_content e injete o código acima na cabeça usando a função addScriptDeclaration() do Joomla.

Atualizar:

$js = '
    var needToConfirm = true;

    window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (needToConfirm) {
            return "Make sure you have saved your JCE content";
        }
    }    
';
$doc = JFactory::getDocument();
$doc->addScriptDeclaration($js);
6
Lodder

Minha idéia seria adicionar o script js com um módulo chamado Jumi, definir em quais páginas aparecer e as permissões para limitá-lo apenas a editores ou administradores. http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-content/102

0
Eva Farkasne