我有一个像这样的简单index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
setInterval(function(){
if (typeof Cocoa !== 'undefined') {
Cocoa.log('JQuery loaded...');
}
}, 3000);
});
</script>
</head>
<body>
<h1>Testing script in objective c enviroment.</h1>
<div id="container" class="col">
<p>Paragraph 1</p>
<p>content goes here</p>
</div>
</body>
</html>
从我的AppDelegate中的WebView子类加载:
appDelegate.h
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property NSWindow *webWindow;
@property myWebView *myWV;
@end
// ...
appDelegate.m
#import <WebKit/WebKit.h>
#import "myWebView.h"
@implementation AppDelegate
// ...
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
CGRect webRect = CGRectMake(0, 0, 1000, 1000);
self.webWindow = [[NSWindow alloc] initWithContentRect:webRect styleMask:NSTexturedBackgroundWindowMask backing:NSBackingStoreBuffered defer:NO];
self.webWindow.contentView = [[NSView alloc] initWithFrame:webRect];
self.myWV = [[myWebView alloc] initWithFrame:webRect frameName:@"myWV" groupName:@"webViews"];
self.myWV.UIDelegate = self;
self.myWV.resourceLoadDelegate = self;
self.myWV.frameLoadDelegate = self;
[self.webWindow.contentView addSubview:self.myWV];
[self.webWindow orderFront:NSApp];
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@""];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
[[self.myWV mainFrame] loadRequest:request];
}
// associate js "Cocoa.log" function with -logJavaScriptString: method
+ (NSString *)webScriptNameForSelector:(SEL)sel
{
if(sel == @selector(logJavaScriptString:))
return @"log";
return nil;
}
//this allows JavaScript to call the -logJavaScriptString: method
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)sel
{
if(sel == @selector(logJavaScriptString:))
return NO;
return YES;
}
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
NSLog(@"webView loaded");
[[self.myWV windowScriptObject] setValue:self forKey:@"Cocoa"];
}
- (void)logJavaScriptString:(NSString *)logText
{
NSLog(@"JavaScript: %@",logText);
}
为什么$(function() {});
内部没有任何内容被调用?如果我将间隔日志函数放在JQuery onReady函数之外,它会在几秒钟后开始调用正确的方法。
是否存在一些阻止脚本加载的跨站点策略问题?如果是这样,我该怎么禁用它?为什么不加载jQuery?
答案 0 :(得分:0)
我改变了
https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js
到
http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js
现在它有效。如果有人知道为什么WebView
不喜欢https,请在评论中告诉我。