当我尝试将java脚本加载到Web视图中时,我得到一个空白屏幕

时间:2012-07-31 18:06:20

标签: javascript html objective-c xcode uiwebview

这是我的代码:

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSError *error;
NSURL *baseURL = [NSURL fileURLWithPath:path];
NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@", html);
[webview loadHTMLString:html baseURL:baseURL];
NSLog(@"error: %@", error);
}

以下是html的内容:

<html>
<head>
<script src="jquerymin.js"></script>
<script src="highcharts.js"></script>
<script src="exporting.js"></script>
</head>
<body>
<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

<script src="script.js"></script>
Test

<input type="button" id="button" />
</body>

</html>

的script.js:

$(function () {
var chart;
$(document).ready(function() {
    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'Therapist productivity by Region'
        },
        tooltip: {
            formatter: function() {
                return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
            }
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    formatter: function() {
                        return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Therapist Productivity',
            data: [
                ['South Carolina',   45.0],
                ['Michigan',       26.8],
                {
                    name: 'California',
                    y: 12.8,
                    sliced: true,
                    selected: true
                },
                ['Florida',    8.5],
                ['New York',     6.2],
                ['Maine',   0.7]
            ]
        }]
    });
});

});

$('#button').click(function() {
$(chart.container).hide();
chart.series[0].remove();
$(chart.container).show();
});

当我运行我的代码时,HTML和“测试”按钮显示在屏幕上,但不显示正在加载的.js文件的内容。我这样做了吗?

3 个答案:

答案 0 :(得分:0)

这应该是一个评论,但我没有足够的代表,所以你得到一个“答案”。

我不知道你是否意味着你不能在源中看到你的js代码,或者你看不到它应该做的结果。如果您的意思是前者:使用脚本标记调用script.js,则不会将您的代码嵌入到您的html中。如果是后者:您的js代码应该使用onload属性或ready侦听器调用。如果您提供了script.js,我可以提供更多帮助。

无论哪种方式,一个好的起点是验证您的HTML代码: http://validator.w3.org/

答案 1 :(得分:0)

尝试转义baseURL中的反斜杠和空格。 Joe D'Andrea得到了一个很好的答案on a similar (but not quite duplicate) question。总结一下:

 NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
     stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
     stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
 [webView loadHTMLString:markup baseURL:[NSURL URLWithString:
     [NSString stringWithFormat:@"file:/%@//", resourcePath]]];

答案 2 :(得分:0)

问题是我从未将.js文件带到Build Phases下的Copy Bundle Resources。我移动了文件,它完美地运行了