Какао/WebKit, имея “window.open ()” ссылки JavaScript, открывающиеся в экземпляре Safari

Проблема в том, что ваш подзапрос всегда возвращает значение (иногда возвращает 0), поэтому, когда вы НЕ СУЩЕСТВУЕТЕ (), это всегда ЛОЖЬ, потому что вы всегда получаете ответ. Вы должны изменить NOT EXISTS на 0>, как это

SELECT COUNT(DISTINCT product_id) 
FROM products p1 
WHERE 0>
    (SELECT COUNT(DISTINCT product_id) 
     FROM products p2 
     WHERE p2.product_id IN (12,13,14,15,16) AND p1.product_id = p2.product_id)
7
задан FireWire 30 July 2012 в 10:12
поделиться

3 ответа

Я сделал из прогресса вчера вечером и придавил часть своей проблемы.

Я уже использую webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener: и я заставил это работать с тегами привязки, однако метод никогда, кажется, не называют, когда JavaScript вызывается.

Однако, когда window.open() назван webView:createWebViewWithRequest:request назван, я попытался вынудить окно открыться в Safari здесь, однако запрос является всегда пустым. Таким образом, я никогда не могу считывать URL.

Я сделал некоторый поиск вокруг, и это, кажется, известная "ошибка" однако, я не смог найти способ работать вокруг этого.

Из того, что я понимаю createWebViewWithRequest дает Вам способность создать новый webview, требуемый URL затем отправляется в новый webView, который будет загружен. Это - лучшее объяснение, которое я смог найти до сих пор.

Таким образом, в то время как многие люди указали на эту проблему, я должен все же видеть любое решение, которое соответствует моим потребностям. Я попытаюсь копаться немного глубже в decidePolicyForNewWindowAction снова.

Спасибо!

9
ответ дан 6 December 2019 в 07:53
поделиться

Ну, я обрабатываю его путем создания макета webView, устанавливая это - делегат frameLoad в пользовательском классе, который обрабатывает

- (void)webView:decidePolicyForNavigationAction:actionInformation :request:frame:decisionListener:

и открывает новое окно там.

код:

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request {
    //this is a hack because request URL is null here due to a bug in webkit        
    return [newWindowHandler webView];
}

и NewWindowHandler:

@implementation NewWindowHandler

-(NewWindowHandler*)initWithWebView:(WebView*)newWebView {
    webView = newWebView;

    [webView setUIDelegate:self];
    [webView setPolicyDelegate:self];  
    [webView setResourceLoadDelegate:self];

    return self;
}

- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener {
    [[NSWorkspace sharedWorkspace] openURL:[actionInformation objectForKey:WebActionOriginalURLKey]];
}

-(WebView*)webView {
    return webView;
}
6
ответ дан 6 December 2019 в 07:53
поделиться

Вы не упоминаете, какое ошибочное поведение Вы видите. Быстрая возможность, то, что при реализации метода делегата Вы забыли говорить webview игнорирование щелчка путем вызова проигнорировать метода WebPolicyDecisionListener, который был передан делегату, который, возможно, поместил вещи в странное состояние.

Если это не проблема, то, сколько контроля Вы имеете над содержанием, которое Вы отображаете? Делегат политики дает Вам легкие механизмы для фильтрации всех загрузок ресурса (поскольку Вы обнаружили), и все новое окно открывается с помощью webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:. все вызовы window.open должны направить, через который, как будет что-либо еще, что инициировало новое окно.

Если существует другое окно, открывается, Вы хотите держать свое приложение внутри, Вы желание сделать немного больше работы. Одним из аргументов, переданных в делегата, является словарь, содержащий информацию о событии. Insie, что словарь WebActionElementKey будет иметь словарь, содержащий много деталей, включая исходное dom содержание ссылки. Если Вы хотите ввести по абсолютному адресу вокруг там, можно захватить фактический элемент DOM и проверить текст href, чтобы видеть, запускается ли он с window.open. Это - немного тяжелый вес, но если Вы захотите мелкомодульное управление, то это даст его Вам.

2
ответ дан 6 December 2019 в 07:53
поделиться