Я теперь нашел один способ использовать рычаги отладчика сценариев в веб-представлении (примечание, НЕ UIWebView). Я сначала должен был разделить UIWebView на подклассы и добавить метод как это:
- (void)webView:(id)webView windowScriptObjectAvailable:(id)newWindowScriptObject {
// save these goodies
windowScriptObject = newWindowScriptObject;
privateWebView = webView;
if (scriptDebuggingEnabled) {
[webView setScriptDebugDelegate:[[YourScriptDebugDelegate alloc] init]];
}
}
Следующий необходимо создать класс YourScriptDebugDelegate, который содержит методы как они:
// in YourScriptDebugDelegate
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
baseLineNumber:(unsigned)lineNumber
fromURL:(NSURL *)url
sourceId:(int)sid
forWebFrame:(WebFrame *)webFrame
{
NSLog(@"NSDD: called didParseSource: sid=%d, url=%@", sid, url);
}
// some source failed to parse
- (void)webView:(WebView *)webView failedToParseSource:(NSString *)source
baseLineNumber:(unsigned)lineNumber
fromURL:(NSURL *)url
withError:(NSError *)error
forWebFrame:(WebFrame *)webFrame
{
NSLog(@"NSDD: called failedToParseSource: url=%@ line=%d error=%@\nsource=%@", url, lineNumber, error, source);
}
- (void)webView:(WebView *)webView exceptionWasRaised:(WebScriptCallFrame *)frame
sourceId:(int)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
NSLog(@"NSDD: exception: sid=%d line=%d function=%@, caller=%@, exception=%@",
sid, lineno, [frame functionName], [frame caller], [frame exception]);
}
существует, вероятно, большое влияние во время выполнения для этого, поскольку делегат отладки может также предоставить методы, которые назовут для ввода и выхода из стекового фрейма, и для выполнения каждой строки кода.
См. http://www.koders.com/noncode/fid7DE7ECEB052C3531743728D41A233A951C79E0AE.aspx для Objective C ++ определение WebScriptDebugDelegate.
Те другие методы:
// just entered a stack frame (i.e. called a function, or started global scope)
- (void)webView:(WebView *)webView didEnterCallFrame:(WebScriptCallFrame *)frame
sourceId:(int)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
// about to execute some code
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
sourceId:(int)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
// about to leave a stack frame (i.e. return from a function)
- (void)webView:(WebView *)webView willLeaveCallFrame:(WebScriptCallFrame *)frame
sourceId:(int)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
Примечание, что это все скрыто в частной платформе, не пытается поместить это в код, который Вы отправляете App Store, и быть готовыми к некоторому хакерству заставить его работать.
Я бы указал словарь допустимых имен POST.
$accepted = array('foo', 'bar', 'baz');
foreach ( $_POST as $foo=>$bar ) {
if ( in_array( $foo, $accepted ) && !empty($bar) ) {
$_SESSION[$foo] = $bar;
}
}
Или что-то в этом роде. Я бы не использовал пустой
, потому что он рассматривает 0
как пустой.
Ну, первое, что я хотел бы предложить, это вам не этого делать. Это огромная потенциальная дыра в безопасности. Допустим, вы полагаетесь на переменную сеанса с именем пользователя и / или типом пользователя (очень часто). Кто-то может просто опубликовать эти детали. Вам следует придерживаться подхода белого списка, копируя только утвержденные значения из $ _ POST
в $ _ SESSION
то есть:
$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
if (isset($_POST[$v]) {
$_SESSION[$v] = $_POST[$v];
}
}
То, как вы определяете «пустой», определяет, какой тип проверки вы выполняете. В приведенном выше коде используется isset ()
. Вы также можете выполнить if ($ _POST [$ v]) ...
если вы не хотите писать пустые строки или число 0.
Вот,
if(isset($_POST) {
foreach ($_POST as $key => $val) {
if($val != "Submit")
$_SESSION["$key"] = $val;
}
}