Как создать протокол с методами, которые являются необязательными?

Самая сложная часть этого - убедиться, что сценарий не срабатывает на страницах, которые не являются перенаправителями. Для этого используйте regex @include .

После этого это просто вопрос извлечения целевого сайта и изменение location. Вот полный скрипт:

// ==UserScript==
// @name        _Skip redirects
// @include     /site#http/
// @run-at      document-start
// ==/UserScript==

var targetSite = location.href.replace (/^.+?site#(http.+)$/, "$1");

//--- Use assign() for debug or replace() to keep the browser history clean.
location.assign (targetSite);
//location.replace (targetSite);

Обратите внимание, что @run-at document-start не является строго необходимым, но он может сэкономить время отклика сценария перенаправления на справедливую сумму.

129
задан jpm 26 November 2008 в 23:15
поделиться

2 ответа

От страницы Apple на" Формальные Протоколы ":

Дополнительные методы Протокола могут быть отмечены как дополнительное использование @optional ключевого слова. При соответствии @optional модальному ключевому слову существует @required ключевое слово для формального обозначения семантики поведения по умолчанию. Можно использовать @optional и @required для разделения протокола в разделы, как Вы считаете целесообразным. Если Вы не указываете ключевого слова, значение по умолчанию является @required.

@protocol MyProtocol

- (void)requiredMethod;

@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;

@required
- (void)anotherRequiredMethod;

@end
242
ответ дан Nate Cook 26 November 2008 в 23:15
поделиться

Используйте @optional ключевое слово перед Вашим объявлением метода для создания этого дополнительным. Простой как это!

// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
    //...
@end
11
ответ дан e.James 26 November 2008 в 23:15
поделиться