为什么我的Mac应用程序中的WebView html拒绝加载JQuery或任何外部脚本

Why does the WebView html in my Mac app refuse to load JQuery or any external script?

本文关键字:JQuery 加载 任何外 脚本 拒绝 html Mac 我的 应用程序 WebView 为什么      更新时间:2023-09-26

我有一个简单的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() {});内部没有任何调用?如果我将interval log函数放在JQuery onReady函数之外,它确实会在几秒钟后开始调用正确的方法。

是否存在阻止加载脚本的跨站点策略问题?如果是,我如何禁用它?为什么jQuery没有加载?

我更改了

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的原因,请在评论中告诉我。