简体   繁体   English

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

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

I have a simple index.html file like this: 我有一个简单的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>

loaded from a WebView subclass in my AppDelegate: 从我的AppDelegate中的WebView子类加载:

appDelegate.h appDelegate.h

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property NSWindow *webWindow;
@property myWebView *myWV;

@end

// ...

appDelegate.m 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);
}

Why does nothing inside $(function() {}); 为什么$(function() {});里面什么也没有$(function() {}); get called? 被叫? If I place the interval log function outside the JQuery onReady function, it does start to call the correct method after a few seconds. 如果我将时间间隔日志函数放在JQuery onReady函数之外,那么它会在几秒钟后开始调用正确的方法。

Is there some cross-site policy issue going on that's preventing scripts from being loaded? 是否存在一些跨站点策略问题正在阻止脚本加载? If so, how can I disable it? 如果是这样,如何禁用它? Why isn't jQuery loading? 为什么不加载jQuery?

I changed 我变了

https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js

to

http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js

and now it works. 现在可以了。 If anyone knows why WebView doesn't like https, let me know in the comments. 如果有人知道为什么WebView不喜欢https,请在评论中告诉我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM