ссылка на другую веб-вкладку [дубликат]

Другие два варианта:

Базовый пакет:

df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df

sqldf package:

library(sqldf)
sqldf('SELECT name,
      MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1, 
      MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
      MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
      MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
      FROM dat1
      GROUP BY name')
24
задан Govind KamalaPrakash Malviya 14 June 2011 в 08:05
поделиться

4 ответа

Если вы не хотите изменять текущий код, вы можете просто переопределить функцию window.open():

var openedWindows = [];
window._open = window.open; // saving original function
window.open = function(url,name,params){
    openedWindows.push(window._open(url,name,params));
    // you can store names also...
}

Запустить этот код перед вызовом window.open(). Все ссылки на открытые окна будут храниться в массиве openedWindows. Вы можете получить к ним доступ в любом месте

52
ответ дан Hrant Khachatrian 23 August 2018 в 02:17
поделиться
  • 1
    Поднимитесь за хороший трюк! – rahulmohan 14 June 2011 в 13:45
  • 2
    @Govind: Предостережение для этого решения - это взломать и лучше избегать предотвращения будущих проблем обслуживания. См. stackoverflow.com/questions/6223449/… – rahulmohan 14 June 2011 в 13:46
  • 3
    конечно! чтобы избежать будущих проблем, лучше переименовать функцию, которую я написал, например, как window.open2() :) И изменить все существующие .open() вызовы на .open2(). Но похоже, что @Govind не хочет ничего менять в своих кодах ... – Hrant Khachatrian 14 June 2011 в 15:41
  • 4
    Проблема в том, что когда мы обновляем главное окно, мы теряем все данные в openWindows. Любая идея избежать этого? – Rodrigo 15 March 2016 в 16:25
  • 5
    Чтобы не сломать какой-либо код, который полагается на поведение по умолчанию, это изменилось window.open () также должно вернуть ссылку после сохранения в массиве. – z-boss 3 February 2017 в 18:37

Лучше всего назвать окна с помощью префикса и счетчика.

Мне нужно было определить, было ли именованное окно (т.е. CBCheckout) уже открыто и использовалось это:

var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1');
try {
    if (signupWindow.document.location.href == "about:blank") {
        signupWindow.close();
        signupWindow = undefined;
    }
} catch (e) { }

Это подтвердило ссылку на именованное открытое окно. Если он не существует, вы увидите всплывающее окно с небольшим окном.

Если вы знаете возможные имена окон, вы можете просмотреть имена, пытаясь найти их.

0
ответ дан Derek Wade 23 August 2018 в 02:17
поделиться

Хорошо, я использовал ответы на этот вопрос в Oracle CRM onDemand, чтобы отключить выбор во всплывающем окне, выполняющем скрипт из родительского окна, и это сработало! (Я не контролирую генерацию всплывающих окон, они открываются каркасом приложения)

Посмотрим, как я это сделал:

Контекст: на подробной странице пользователь может добавьте информацию, щелкнув значок увеличительного стекла >>> открывается новое окно, содержащее форму поиска, но выбор нарушает администратора: если пользователь изменит свое значение по умолчанию, он / она получит доступ к запрещенным записям!

Первый подход: отключить это сейчас!

Попытка: я нашел, что изображение onclick связано с инструментами моего браузера (F12). Был метод openAssocPopup, а затем я знал имя дочернего окна: «OccamPopup1»:)

Хорошо! Итак, давайте сделаем волшебство (выполнено в родительском окне):

window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true);

Я думаю, это может помочь, так как этот вопрос мне тоже помог. Ты был прав. Теперь я пытаюсь обернуть объект документа ребенка в объект родительского jQuery, чтобы я мог получить доступ к DOM всего дочернего объекта ... но это еще одна история ...

1
ответ дан Eugenio F. Martinez Pacheco 23 August 2018 в 02:17
поделиться
  • 1
    Это не мешает пользователю изменять значение поля либо с помощью Javascript (например, из строки URL), либо с помощью инструментов dev, как вы это сделали, чтобы найти поле. Если возможно, что «запрещенные записи» должны быть предотвращены с помощью кода на стороне сервера. Я знаю, что я отвечаю на старый пост, и, думаю, вы рассмотрели эти возможности и приняли единственное доступное решение. Тем не менее, я думаю, что важно, чтобы другие, сталкивающиеся с этим, осознавали риск защиты только на стороне клиента. – SimeonJM 29 October 2014 в 01:54
  • 2
    Да, вы правы ... но ... 1. Oracle CRM onDemand находится в облаке, и мы меняем вещи с помощью jQuery, поскольку у нас есть только несколько ограниченных инструментов для настройки функциональности. 2. Пользователи - новички или боты Javascript ... почти все из них ... Я полагаю, они не тратят время на взлом CRM, как мы (мы их провайдеры, команда разработчиков) ... и я не знаю, если они это сделают ...: СП СПАСИБО! – Eugenio F. Martinez Pacheco 13 November 2014 в 09:03

Я не думаю, что вы можете, если не знаете имена окон, которые, как я предполагаю, вы этого не делаете. (Если вы знаете их имена, вы можете использовать window.open("", "name"), чтобы получить ссылку на них.)

Лучшим вариантом является, конечно, запоминание ссылки, возвращенной с window.open в первую очередь & nbsp; & mdash; но вы это знаете. : -)

15
ответ дан T.J. Crowder 23 August 2018 в 02:17
поделиться
  • 1
    +1 хороший ответ, но у меня есть требование такого подхода. – Govind KamalaPrakash Malviya 14 June 2011 в 08:31
  • 2
    @Govind: Понял. К сожалению, запрет сохранения возвращаемого значения или звание назначенных им имен, чтобы вы могли получить их позже с помощью window.open("", "name"), я не думаю, что есть третья альтернатива. – T.J. Crowder 14 June 2011 в 08:32
Другие вопросы по тегам:

Похожие вопросы: